AI大模型(六)Langchain核心模块与实战(一)

LangChain调用

在这里插入图片描述

采用LangChain调用LLM

import os

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI

os.environ['LANGCHAIN_TRACING_V2'] = "true"
os.environ['LANGCHAIN_API_KEY'] = "xxx"

# 调用大预言模型的三件事情
# 1.创建模型
model = ChatOpenAI(model='gpt-4-turbo',api_key='sk-xx',
                   base_url='xxx')

# 2. 给出提示prompt
msg = [
    SystemMessage(content='请将以下的内容翻译成意大利语'),
    HumanMessage(content='你好,请问你要去哪里?')
]

# result = model.invoke(msg)
# print(result)

# 简单的解析响应数据
#3. 创建返回数据的解析器
parser = StrOutputParser()
# print(parser.invoke(result))

#4. 得到链
chain = model | parser

#5.直接使用chain来调用
print(chain.invoke(msg))

在这里插入图片描述

Langchain的提示模板

import os

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

os.environ['LANGCHAIN_TRACING_V2'] = "true"
os.environ['LANGCHAIN_API_KEY'] = "xxx"

# 调用大预言模型的三件事情
# 1.创建模型
model = ChatOpenAI(model='gpt-4-turbo',api_key='sk-xx',
                   base_url='xxx')

# 2. 给出提示prompt
msg = [
    SystemMessage(content='请将以下的内容翻译成意大利语'),
    HumanMessage(content='你好,请问你要去哪里?')
]

# result = model.invoke(msg)
# print(result)

# 简单的解析响应数据
#3. 创建返回数据的解析器
parser = StrOutputParser()
# print(parser.invoke(result))

# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([('system','请将下面的内容翻译成{language}'),
                                                    ('user',"{text}")])

#4. 得到链
chain = prompt_template | model | parser

#5.直接使用chain来调用
# print(chain.invoke(msg))
print(chain.invoke({'language':'English','text':'我下午还有一节课,不能去打球了'}))

得到如下输出结果
在这里插入图片描述

部署你的LangChian程序

执行安装命令:
pip install “langserve[all]”

import os

from fastapi import FastAPI
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langserve import add_routes

os.environ['LANGCHAIN_TRACING_V2'] = "true"
os.environ['LANGCHAIN_API_KEY'] = "xxx"

# 调用大预言模型的三件事情
# 1.创建模型
model = ChatOpenAI(model='gpt-4-turbo',api_key='xxx',
                   base_url='https://xiaoai.plus/v1')

# 简单的解析响应数据
#3. 创建返回数据的解析器
parser = StrOutputParser()
# print(parser.invoke(result))

# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([('system','请将下面的内容翻译成{language}'),
                                                    ('user',"{text}")])

#4. 得到链
chain = prompt_template | model | parser

#5.直接使用chain来调用
# print(chain.invoke(msg))
print(chain.invoke({'language':'English','text':'我下午还有一节课,不能去打球了'}))

# 把我们的程序部署成服务
# 创建fastAPI应用
app = FastAPI(title='我的Langchain服务',version='V1.0',description='使用Langchain翻译任何语句的服务器')
add_routes(
    app,
    chain,
    path='/chainDemo'
)
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="localhost", port=8000)

在这里插入图片描述
在 FastAPI 中使用 LangServe 的 add_routes 函数注册 LangChain 链时,端点路径的设计遵循了 LangServe 的特定约定。以下是详细解释:

原因分析:
RESTful 端点设计:
LangServe 为每个链注册 一组标准化的 REST 端点,而非单一端点。这些端点包括:

POST /your_path/invoke:同步调用链

POST /your_path/batch:批量调用

POST /your_path/stream:流式输出

GET /your_path/input_schema:获取输入 JSON Schema

GET /your_path/output_schema:获取输出 JSON Schema

通过以上学习,未来如果我们写好了一个大预言模型的真正的消费者级别的产品,我们可以把这个产品部署成服务的方式,然后提供给其他的应用程序或者人去调用

Langchain构建聊天机器人

这个聊天机器人能够进行对话并记住之前的互动。
需要安装:pip install langchain_community

  • Chat History:它允许聊天机器人“记住”过去的互动,并在回应后续问题时考虑它们。
  • 流试输出
import os

from langchain_core.messages import HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
from langchain_community.chat_message_histories import  ChatMessageHistory

os.environ['LANGCHAIN_TRACING_V2'] = "true"
os.environ['LANGCHAIN_PROJECT'] ="LangchainDemo"
os.environ['LANGCHAIN_API_KEY'] = "xxx"

# 聊天机器人案例
# 1.创建模型
model = ChatOpenAI(model='gpt-4-turbo',api_key='sk-xxx',
                   base_url='https://xiaoai.plus/v1')



# 定义提示模板

prompt_template = ChatPromptTemplate.from_messages([
    ('system','你是一个乐于助人的助手。用{language}尽你所能回答所有问题。'),
    MessagesPlaceholder(variable_name='my_msg')
])

#4. 得到链
chain = prompt_template | model

# 开始聊天对话,保存聊天记录
store = {} #所有用户的聊天记录都保存到store。 key:sessionId, value:历史聊推荐记录对象

# 此函数预期将接收一个session_id并返回一个消息历史记录对象。
def get_session_history(session_id: str):
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]

do_message = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key='my_msg'  # 每次聊天时候发送msg的key
)

config = {'configurable': {'session_id': 'zs1234'}}  # 给当前会话定义一个sessionId
# 第一轮聊天
resp = do_message.invoke({
    'my_msg':[HumanMessage(content='你好啊!我是LaoLiu')],
    'language':'中文',
},
 config = config
)
print(resp.content)


# 第二轮聊天(历史聊天的体现)
resp2 = do_message.invoke({
    'my_msg':[HumanMessage(content='请问:我的名字是什么')],
    'language':'中文',
},
 config = config
)
print(resp2.content)

# 第三轮:返回的数据是流式的
for resp in do_message.stream({
    'my_msg':[HumanMessage(content='请问:请给我讲一个笑话')],
    'language':'English',
},
 config = config
):
    # 每次resp都是一个token
    print(resp.content,end='-')

在这里插入图片描述
store里面存储的内容:

{'zs1234': InMemoryChatMessageHistory(messages=[HumanMessage(content='你好啊!我是LaoLiu', additional_kwargs={}, response_metadata={}), AIMessage(content='你好,LaoLiu!很高兴见到你。有什么我可以帮助你的吗?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 50, 'total_tokens': 82, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'gpt-4-turbo', 'system_fingerprint': 'fp_5603ee5e2e', 'id': 'chatcmpl-GnfWBMpGjL0ysDrC8RooLYwQ8rcCQ', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None}, id='run--85c7f74a-39fd-41f0-bc7e-c07fa3a2f6d7-0', usage_metadata={'input_tokens': 50, 'output_tokens': 32, 'total_tokens': 82, 'input_token_details': {}, 'output_token_details': {}}), HumanMessage(content='请问:我的名字是什么', additional_kwargs={}, response_metadata={}), AIMessage(content='你刚刚告诉我,你的名字是LaoLiu。需要帮助解决其他问题吗?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 33, 'prompt_tokens': 100, 'total_tokens': 133, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'gpt-4-turbo', 'system_fingerprint': 'fp_5603ee5e2e', 'id': 'chatcmpl-j0W7QTq3XlqPD6QHYz20RzpaFCZH2', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None}, id='run--9f7da6e0-af80-414a-bdfb-082ef055d931-0', usage_metadata={'input_tokens': 100, 'output_tokens': 33, 'total_tokens': 133, 'input_token_details': {}, 'output_token_details': {}}), HumanMessage(content='请问:请给我讲一个笑话', additional_kwargs={}, response_metadata={}), AIMessageChunk(content="Sure! Here's a light joke for you:\n\nWhy don't skeletons fight each other?\n\nThey don't have the guts. \n\nI hope that brings a smile to your face!", additional_kwargs={}, response_metadata={'finish_reason': 'stop', 'model_name': 'gpt-4-turbo', 'system_fingerprint': 'fp_5603ee5e2e'}, id='run--f50c092c-8509-452d-97ed-9af20b7fbb98')])}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值