马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
之前的案例都是一次性的会话,我们有时候需要进行一连沟通,就需要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企服之家,中国第一个企服评测及商务社交产业平台。
|