📌 实现思路图解
是 否 用户发送消息 是否新会话? 创建session_id 读取历史文件 初始化空历史 保留最近3轮对话 生成AI回复 保存最新历史 返回带记忆的回复
核心实现代码
python
def debug(self, app_id: UUID):
# 1.提取从接口中获取的输入
req = CompletionReq()
if not req.validate():
return validate_error_json(req.errors)
# 2.创建prompt与memory
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个强大的聊天机器人,能根据用户的提问回复对应的问题"),
MessagesPlaceholder("history"),
("human", "{query}"),
])
memory = ConversationBufferWindowMemory(
k=3,
input_key="query",
output_key="output",
return_messages=True,
chat_memory=FileChatMessageHistory("./storage/memory/chat_history.txt"),
)
# 3.构建llm应用
llm = ChatOpenAI(model="gpt-3.5-turbo-16k")
# 4.创建链应用
chain = RunnablePassthrough.assign(
history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
) | prompt | llm | StrOutputParser()
# 5.调用链生成内容
chain_input = {"query": req.query.data}
content = chain.invoke(chain_input)
# 6.存储链状态
memory.save_context(chain_input, {"output": content})
return success_json({"content": content})