【langchain】3分钟构建一个上下文聊天机器人

langchain架构已有记忆功能,本文将简单介绍一下如何构建一个带有记忆功能的机器人

首先导入需要的包

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.chat_message_histories import SQLChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

定义llm的基础设置

模型名和apikey

python 复制代码
llm = ChatOpenAI(model = ,apikey=)

创建prompt词

MessagesPlaceholder(variable_name="history"),是占位符,为了导入完整的历史记录

python 复制代码
prompt = ChatPromptTemplate(
	[
		("system", "你是一个得力的助手"),
         MessagesPlaceholder(variable_name="history"),
         ("human", "{question}"),
	]
)

创建chain

| 是 LangChain 的"链式操作符"(pipe operator),类似于 Unix 的管道(pipe)。它将 prompt 的输出"管道"到 llm 的输入,形成一个"链"。

这个链的执行流程是:用户输入 → 填充提示模板 → 发送给 LLM 生成回复。目的:简化调用,只需 chain.invoke(input) 就能运行整个流程。如果不链式连接,你需要手动填充提示再调用模型。

python 复制代码
chain = prompt| llm

RunnableWithMessageHistory 是 LangChain 的高级 Runnable 类,用于包装普通链(chain),添加历史管理功能。参数:

chain:要包装的链。

lambda session_id: SQLChatMessageHistory(...):一个 lambda 函数(匿名函数),根据 session_id 创建历史存储器。SQLChatMessageHistory 是存储类,

connection_string="sqlite:///chat_history.db" 指定使用本地 SQLite 数据库(文件会自动创建在项目根目录)。

input_messages_key="question":输入字典中,用户消息的键名(匹配提示模板中的 {question})。LangChain 会从这个键提取用户消息,并注入到提示模板中。目的:标准化输入格式。简单语法,无需额外解释。

history_messages_key="history":历史消息在提示中的占位符键名(匹配 MessagesPlaceholder("history"))

python 复制代码
	chain_with_history = RunnableWithMessageHistory(
            chain,
            lambda session_id: SQLChatMessageHistory(
                session_id=session_id, connection_string="sqlite:///chat_history.db"
            ),
            input_messages_key="question",
            history_messages_key="history",
        )

至此为止,我们就创建了完整的流程,那么我们接下来怎么了进行交流呢

我们使用invoke方法,由于我们是带有历史记录的,所以需要指定一个config。里面需要包括一个config文件

python 复制代码
response = self.chain_with_history.invoke(
            {"question": text},
            config={"configurable": {"session_id": session_id}}
        )
        
        response_text = response.content

参考文档:langchain

相关推荐
民乐团扒谱机3 分钟前
【微实验】机器学习之集成学习 GBDT和XGBoost 附 matlab仿真代码 复制即可运行
人工智能·机器学习·matlab·集成学习·xgboost·gbdt·梯度提升树
Coder_Boy_5 分钟前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
芷栀夏8 分钟前
CANN ops-math:揭秘异构计算架构下数学算子的低延迟高吞吐优化逻辑
人工智能·深度学习·神经网络·cann
L5434144610 分钟前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
孤狼warrior10 分钟前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
凯子坚持 c11 分钟前
构建企业级 AI 工厂:基于 CANN `cann-mlops-suite` 的端到端 MLOps 实战
人工智能
Elwin Wong13 分钟前
浅析OpenClaw:从“贾维斯”梦想看下一代 AI 操作系统的架构演进
人工智能·agent·clawdbot·moltbot·openclaw
Rorsion14 分钟前
PyTorch实现线性回归
人工智能·pytorch·线性回归
AI资源库15 分钟前
OpenClaw:159K Star的开源AI助手正在重新定义“个人AI“的边界
人工智能·语言模型
Katecat9966320 分钟前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python