前言
为了让聊天更加智能化,体验更好,打算搞个聊天历史对话,让 deepseek 可以结合上下文回答。
一、准备环境
- ollama,用于在本地运行、部署和管理大型语言模型(LLMs)。
- deepseek 模型,本文用的 deepseek-r1:14b。
- langchain,大语言模型应用程序的开发框架,主要 python 实现。
二、开发思路
- 使用 langchain 的 SQLChatMessageHistory 模块管理聊天历史记录,每段对话一个 session_id。
- 将聊天历史记录存储在 sqlite 数据库。
- 设置聊天上下文最大次数,即多轮对话次数,达到之后清空聊天记录。
三、代码解读
- 初始化 llm
# 设置Ollama的主机和端口
os.environ["OLLAMA_HOST"] = "127.0.0.1"
os.environ["OLLAMA_PORT"] = "11434"
def get_llm():
# 定义提示模板
template = """
你是一个专业的助手,请根据用户的问题,生成详细且专业的回答。
用户的问题:{input}
"""
prompt = ChatPromptTemplate.from_template(template)
# 初始化Ollama模型
model = OllamaLLM(model="deepseek-r1:14b")
# 创建链
llm = prompt | model
return llm
- 初始化聊天历史
# 初始化聊天历史
def get_session_history(session_id):
return SQLChatMessageHistory(session_id, "sqlite:///chat_history.db")
- 基于聊天历史对话
def start_chat_history(input, session_id):
# 判断是否新起对话
delete_chat_history(session_id)
# 初始化llm
llm = get_llm()
# 创建带历史记录的链
runnable_with_history = RunnableWithMessageHistory(
llm,
get_session_history,
input_messages_key="input" # 明确指定输入键
)

最低0.47元/天 解锁文章
996





