LangChain入门(五)AI记着聊天汗青

打印 上一主题 下一主题

主题 1852|帖子 1852|积分 5556

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
之前的案例都是一次性的会话,我们有时候需要进行一连沟通,就需要LLM记着之前的聊天内容。
Chat_History 组件提供能力,允许呆板人“记着”过去的互动,并在回应后续题目时思量它们。
需要安装组件
  1. pip install langchain_community
复制代码
保存聊天记录
  1. #保存聊天的历史记录
  2. store = {}  # key 为sessionId,保存所有用户的了解记录
  3. # 根据session_id 获取消息历史记录对象
  4. def get_session_history(session_id: str):
  5.     if session_id not in store:
  6.         store[session_id] = ChatMessageHistory()
  7.     return store[session_id]
  8. do_message = RunnableWithMessageHistory(
  9.    chain,
  10.    get_session_history,
  11.    input_messages_key='my_msg'  #每次聊天时候发送msg的key
  12. )
  13. config ={'configurable':{'session_id':'l1211'}}  #给当前会话定义一个sessionid
  14. # 第一轮
  15. resp1 = do_message.invoke(
  16.     {
  17.         'my_msg':[HumanMessage(content='您好啊!我是悠然')],
  18.         'language':'中文'
  19.     },
  20.     config=config
  21. )
  22. print(resp1.content)
复制代码
提示词模板修改,在提示词模板中添加聊天汗青记录
  1. chat_prompt = ChatPromptTemplate.from_messages(
  2.       [
  3.          ("system", "你是一个乐于助人的助手,用{language}尽你所有回答所有问题"),
  4.          MessagesPlaceholder(variable_name='my_msg')
  5.       ]
  6. )
复制代码
流式输出,输出是一个token一个token输出的
  1. for resp in do_message.stream(
  2.     {
  3.         'my_msg':[HumanMessage(content='请给我讲一个笑话')],
  4.         'language':'English'
  5.     },
  6.     config=config2
  7. ):print(resp.content,end="-")  #一次响应是一个token
复制代码

完整代码如下:
  1. 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(
  2.       [
  3.          ("system", "你是一个乐于助人的助手,用{language}尽你所有回答所有问题"),
  4.          MessagesPlaceholder(variable_name='my_msg')
  5.       ]
  6. )# 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(
  7.     {
  8.         'my_msg':[HumanMessage(content='请给我讲一个笑话')],
  9.         'language':'English'
  10.     },
  11.     config=config2
  12. ):print(resp.content,end="-")  #一次响应是一个token
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表