qidao123.com技术社区-IT企服评测·应用市场
标题:
LangChain入门(五)AI记着聊天汗青
[打印本页]
作者:
曹旭辉
时间:
7 天前
标题:
LangChain入门(五)AI记着聊天汗青
之前的案例都是一次性的会话,我们有时候需要进行一连沟通,就需要LLM记着之前的聊天内容。
Chat_History 组件提供能力,允许呆板人“记着”过去的互动,并在回应后续题目时思量它们。
需要安装组件
pip install langchain_community
复制代码
保存聊天记录
#保存聊天的历史记录
store = {} # key 为sessionId,保存所有用户的了解记录
# 根据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':'l1211'}} #给当前会话定义一个sessionid
# 第一轮
resp1 = do_message.invoke(
{
'my_msg':[HumanMessage(content='您好啊!我是悠然')],
'language':'中文'
},
config=config
)
print(resp1.content)
复制代码
提示词模板修改,在提示词模板中添加聊天汗青记录
chat_prompt = ChatPromptTemplate.from_messages(
[
("system", "你是一个乐于助人的助手,用{language}尽你所有回答所有问题"),
MessagesPlaceholder(variable_name='my_msg')
]
)
复制代码
流式输出,输出是一个token一个token输出的
for resp in do_message.stream(
{
'my_msg':[HumanMessage(content='请给我讲一个笑话')],
'language':'English'
},
config=config2
):print(resp.content,end="-") #一次响应是一个token
复制代码
完整代码如下:
from langchain.chat_models import init_chat_modelfrom langchain_core.output_parsers import StrOutputParserfrom langchain.prompts.chat import ChatPromptTemplate,MessagesPlaceholderfrom langchain_core.messages import SystemMessage, HumanMessagefrom langchain_community.chat_message_histories import ChatMessageHistoryfrom langchain_core.runnables.history import RunnableWithMessageHistoryimport os# 这里只是示意,工程中建议使用getpass.getpass()来获取API密钥api_key = os.environ.get("DEEPSEEK_API_KEY");api_base = "https://api.deepseek.com/"#聊天呆板人案例#1.界说模子model = init_chat_model( model="deepseek-chat", api_key=api_key, api_base=api_base, temperature=0.8, max_tokens=1024, model_provider="deepseek", )#2.界说提示词模板 chat_prompt = ChatPromptTemplate.from_messages(
[
("system", "你是一个乐于助人的助手,用{language}尽你所有回答所有问题"),
MessagesPlaceholder(variable_name='my_msg')
]
)# 3. 界说解析器parser =StrOutputParser()# 4. 界说chainchain = chat_prompt | model #保存聊天的汗青记录store = {} # key 为sessionId,保存所有效户的了解记录# 根据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':'l1211'}} #给当前会话界说一个sessionid# 第一轮resp1 = do_message.invoke( { 'my_msg':[HumanMessage(content='您好啊!我是悠然')], 'language':'中文' }, config=config)print(resp1.content)#第二轮resp2 = do_message.invoke( { 'my_msg':[HumanMessage(content='请问我的名字是什么?')], 'language':'中文' }, config=config)print(resp2.content)config2 ={'configurable':{'session_id':'1213131'}} #给当前会话界说一个sessionid#第三轮 返回的数据是流式的for resp in do_message.stream(
{
'my_msg':[HumanMessage(content='请给我讲一个笑话')],
'language':'English'
},
config=config2
):print(resp.content,end="-") #一次响应是一个token
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4