随笔记录
LLM-聊天机器人
2025-4-9 diaba
import os

from langchain_community.chat_message_histories import ChatMessageHistory
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 langserve import add_routes

# pip install langchain_community

# 科学上网
os.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'

# 使用 langsmith
os.environ["LANGCHAIN_TRACING_V2"] = "true"
# 不写项目名称,会用默认的项目,如果指定了,用指定的 langsmith项目名
os.environ["LANGCHAIN_PROJECT"] = "langchainDemo"
os.environ["LANGCHAIN_API_KEY"] = "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"

# 调用LLM 做一个聊天机器人

# 1.创建模型
model = ChatOpenAI(model='gpt-4-turbo')

prompt_template = ChatPromptTemplate.from_template([
('system','你是一个乐于助人的助手。用{language}进你所能回答所有问题。'),
MessagesPlaceholder(variable_name='my_msg') # 记录聊天历史记录

])

# 4.得到链
chain = prompt_template | model

# 保存聊天记录
store = {} # 保存所有用户的聊天记录,每个用户用sessionId作为key,value是一个聊天历史记录对象

# 指定一个sessionId,返回一个聊天记录历史对象
def get_session_history(session_id : str):
if session_id not in store :
store[session_id] = ChatMessageHistory()
return store[session_id]

do_messsage = RunnableWithMessageHistory(
chain,
get_session_history,
input_messages_key="my_msg" # 每次发送消息的一个key
)

config = {'configurable':{'session_id':'zhangsan123'}}

# 第一轮聊天
resp = do_messsage(
{
'my_msg' : [HumanMessage(content='你好啊,我是月月。')],
'language' : '中文'
},
config = config
)

print(resp.content)

# 第二轮聊天
resp = do_messsage(
{
'my_msg' : [HumanMessage(content='我的名字是什么?')],
'language' : '中文'
},
config = config
)

print(resp.content)



# 第三轮聊天 流式输出
for resp in do_messsage.stream(
{
'my_msg' : [HumanMessage(content='给我讲一个笑话吧')],
'language' : '中文'
},
config = config
):
# 每次循环(响应)是一个token
print(resp.content,end = '_')

print(resp.content)
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容