手把手构建上下文感知对话机器人(基于LangChain的实战教程)

举报
modelX 发表于 2025/03/04 10:15:10 2025/03/04
44 0 0
【摘要】 传统聊天机器人常因缺乏上下文记忆导致对话割裂。本教程将使用LangChain框架,打造能记住对话历史的智能助手,实现连续自然的交流体验。

手把手构建上下文感知对话机器人:基于LangChain的实战教程

1. 概述与背景

1.1 为什么需要上下文感知?

传统聊天机器人常因缺乏上下文记忆导致对话割裂。本教程将使用LangChain框架,打造能记住对话历史的智能助手,实现连续自然的交流体验。

1.2 核心组件全景图

组件 功能说明 关键技术
语言模型 生成智能回复的核心大脑 GPT-4/DeepSeek
提示词模板 定义对话结构框架 ChatPromptTemplate
历史管理器 对话记忆管家 ChatMessageHistory
会话存储器 多对话隔离存储方案 字典结构+Session ID

1.3 实现流程图

流程图

1.环境配置:安装依赖和加载密钥

2.模型初始化:配置API端点和模型参数

3.历史存储器:实现多会话管理

4.模板定义:构建对话结构模板

5.处理链组装:组合prompt/model/history

6.用户交互:处理输入输出

7.历史管理:自动保存和检索对话记录

2. 实战:构建上下文感知对话代理

2.1 环境搭建与依赖安装

# 安装核心依赖
%pip install -q langchain langchain_experimental openai python-dotenv langchain_openai

# 导入必要库
from langchain_openai import ChatOpenAI
from langchain.memory import ChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY')

2.2 构建聊天历史存储器

# 创建内存存储字典
session_store = {}

def get_chat_history(session_id: str):
    """智能会话存储器"""
    if session_id not in session_store:
        session_store[session_id] = ChatMessageHistory()
    return session_store[session_id]

2.3 设计对话结构模板

# 构建三级对话模板
conversation_blueprint = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的人工智能助手"),  # 角色定义层
    MessagesPlaceholder(variable_name="history"),  # 历史记忆层
    ("human", "{input}")  # 用户输入层
])

2.4 组装对话处理流水线

# 初始化语言引擎 gpt的
# llm_engine = ChatOpenAI(model="gpt-4o-mini", max_tokens=1000, temperature=0)

# 如果是接入deepseek 也可以使用该api,只需调整参数即可,如下:
llm_engine = ChatOpenAI(
    base_url="https://api.deepseek.com/v1",  # DeepSeek API端点
    model="deepseek-chat",                  # DeepSeek模型标识
    openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxx",     # 替换为DeepSeek密钥
    max_tokens=1000,
    temperature=0
)
# 构建处理链
processing_pipeline = conversation_blueprint | llm_engine

# 添加历史管理模块
smart_agent = RunnableWithMessageHistory(
    processing_pipeline,
    get_chat_history,
    input_messages_key="input",
    history_messages_key="history"
)

3. 实战演示

3.1 启动对话会话

user_session = "user_007"

# 首次对话
first_response = smart_agent.invoke(
    {"input": "你好!你好!请问是先有鸡还是先有蛋?"},
    config={"configurable": {"session_id": user_session}}
)
print(f"AI回复: {first_response.content}")

# 延续对话
followup_response = smart_agent.invoke(
    {"input": "我刚才问的第一个问题是什么?"},
    config={"configurable": {"session_id": user_session}}
)
print(f"AI回复: {followup_response.content}")

3.2 查看对话历史

print("\n完整对话记录:")
for message in session_store[user_session].messages:
    print(f"[{message.type.upper()}] {message.content}")

执行运行结果如下图:

1_run_result.png

4. 进阶优化方向

4.1 性能提升方案

  • 记忆压缩:使用ConversationSummaryMemory减少token消耗
  • 长期记忆:集成Redis实现持久化存储
  • 上下文窗口:采用滑动窗口机制控制历史长度

4.2 功能扩展建议

# 添加情感分析模块示例
from textblob import TextBlob

def analyze_sentiment(text):
    analysis = TextBlob(text)
    return analysis.sentiment.polarity

4.3 生产环境部署

  1. 使用FastAPI封装RESTful接口
  2. 添加JWT身份验证
  3. 集成Prometheus监控
  4. 配置Nginx负载均衡

5. 常见问题排查(FAQ)

问题现象 解决方案
历史记忆丢失 检查session ID唯一性
响应速度慢 调整max_tokens参数
上下文理解错误 优化prompt模板设计
API调用超限 添加限流中间件

重点提示:定期清理过期会话可有效提升系统性能,建议设置会话有效期自动清理机制。
完整源代码:https://github.com/qyhua0/ai_langchain

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。