在本文中,我们调用AI接口实现简单的聊天功能,并为聊天功能添加简单的记忆存储能力,这里先存储到文本中作为演示
pythonimport os
import uuid
from dataclasses import dataclass
from operator import itemgetter
from injector import inject
from langchain.memory import ConversationBufferWindowMemory
from langchain_community.chat_message_histories import FileChatMessageHistory
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnablePassthrough, RunnableLambda
from internal.schema.app_schema import CompletionReq
from internal.service import AppService
from pkg.response import success_json, validate_error_json, success_message
def debug(self, app_id: uuid.UUID):
"""聊天接口"""
# 1. 提取从接口中获取的输入,POST
req = CompletionReq()
if not req.validate():
return validate_error_json(req.errors)
# 创建prompt于记忆
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个强大的聊天机器人,能根据用户的提问回答问题"),
MessagesPlaceholder("history"),
("human", "{query}")
])
memory = ConversationBufferWindowMemory(
k=3, # 保留最近的3轮对话
input_key="query",
output_key="output",
return_messages=True,
chat_memory=FileChatMessageHistory("./storage/memory/chat_history.txt")
)
# 创建大语言模型
llm = ChatTongyi(model="qwen-max", dashscope_api_key=os.getenv("OPENAI_API_KEY"))
# 创建链应用
chain = RunnablePassthrough.assign(
history=RunnableLambda(memory.load_memory_variables) | itemgetter("history")
) | prompt | llm | StrOutputParser()
# 调用链应用
chain_input = {"query": req.query.data}
content = chain.invoke(chain_input)
# 讲本轮对话添加到历史上下文中
memory.save_context(chain_input, {"output": content})
return success_json({"content": content})



本文作者:繁星
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!