Langchain实战:如何用ChatGLM-4搭建你的第一个AI对话机器人(附完整代码)

张开发
2026/4/12 22:02:37 15 分钟阅读

分享文章

Langchain实战:如何用ChatGLM-4搭建你的第一个AI对话机器人(附完整代码)
Langchain实战如何用ChatGLM-4搭建你的第一个AI对话机器人附完整代码最近两年大模型技术以惊人的速度渗透到各个领域。从智能客服到内容创作从代码生成到数据分析AI对话机器人正在重塑人机交互的方式。对于开发者而言如何快速将前沿的大模型能力整合到自己的应用中成为一个亟待解决的问题。这正是Langchain这类框架的价值所在——它像一座桥梁连接了强大的基础模型与实际业务需求。本文将带你从零开始用ChatGLM-4和Langchain构建一个具备实用功能的对话机器人。不同于简单的API调用教程我们会深入探讨如何设计对话流程、处理上下文记忆、优化响应质量等实战问题。无论你是想为产品添加智能交互功能还是单纯探索大模型的应用可能性这篇指南都能提供清晰的路径。1. 环境准备与基础配置在开始编码之前我们需要搭建一个稳定的开发环境。ChatGLM-4作为最新一代的大语言模型对硬件有一定要求。如果本地运行有困难可以考虑使用云服务提供的API方案。1.1 安装核心依赖首先创建一个干净的Python环境建议3.9版本然后安装以下关键包pip install langchain0.1.0 pip install chatglm-client1.2.3 pip install python-dotenv这些包分别提供了Langchain框架核心功能ChatGLM-client官方API客户端python-dotenv管理环境变量提示如果遇到版本冲突可以使用pip install --upgrade强制更新依赖项。1.2 获取API密钥访问ChatGLM开发者平台申请API密钥将其保存在项目根目录的.env文件中CHATGLM_API_KEYyour_api_key_here CHATGLM_API_BASEhttps://api.chatglm.cn/v42. 构建基础对话链Langchain的核心概念是链(Chain)——将不同组件连接起来形成完整的工作流。让我们先实现一个最简单的问答机器人。2.1 初始化模型创建chatbot.py文件添加以下代码from langchain.llms import ChatGLM from langchain.chains import LLMChain from langchain.prompts import PromptTemplate import os from dotenv import load_dotenv load_dotenv() llm ChatGLM( api_keyos.getenv(CHATGLM_API_KEY), endpointos.getenv(CHATGLM_API_BASE), temperature0.7 )关键参数说明temperature控制生成文本的随机性0-1之间max_tokens限制响应长度默认20482.2 设计提示模板好的提示(Prompt)设计能显著提升模型表现。下面是一个通用对话模板template 你是一个专业、友好的AI助手。请根据以下对话历史和最新问题给出有帮助的回答。 对话历史 {history} 当前问题{question} prompt PromptTemplate( input_variables[history, question], templatetemplate )2.3 创建对话链将组件组合成可执行的链conversation LLMChain( llmllm, promptprompt, verboseTrue ) response conversation.run( history, question你好能介绍一下你自己吗 ) print(response)运行后会看到类似输出我是基于ChatGLM-4构建的AI助手擅长回答各类问题并提供专业建议。无论您需要学习新知识、解决技术难题还是获取日常信息我都会尽力提供准确、有帮助的回答。3. 实现多轮对话记忆基础问答只是开始真正的对话机器人需要记住上下文。Langchain提供了多种记忆(Memory)方案。3.1 使用ConversationBufferMemory修改之前的代码引入记忆功能from langchain.memory import ConversationBufferMemory memory ConversationBufferMemory( memory_keyhistory, return_messagesTrue ) conversation LLMChain( llmllm, promptprompt, memorymemory, verboseTrue )现在可以测试连续对话questions [ Langchain是什么, 它最适合解决哪些问题, 如何集成到现有系统中 ] for q in questions: print(f用户: {q}) response conversation.run(questionq) print(fAI: {response}\n)观察输出会发现AI能够基于前面的问答内容进行连贯回应而不是孤立地回答每个问题。3.2 优化记忆策略默认的缓冲区记忆可能不够高效。对于长对话可以考虑from langchain.memory import ConversationSummaryMemory memory ConversationSummaryMemory( llmllm, memory_keyhistory )这种记忆方式会生成对话摘要而非完整记录更适合长期对话场景。4. 增强机器人能力基础对话功能已经实现接下来通过Langchain的模块化设计添加实用功能。4.1 集成工具调用让机器人能够执行实际任务比如查询天气from langchain.agents import Tool from langchain.utilities import OpenWeatherMapAPIWrapper weather OpenWeatherMapAPIWrapper() tools [ Tool( name天气查询, funcweather.run, description查询城市天气情况 ) ] from langchain.agents import initialize_agent agent initialize_agent( tools, llm, agentconversational-react-description, memorymemory, verboseTrue ) response agent.run(上海明天天气怎么样) print(response)4.2 添加文档检索结合RAG(Retrieval-Augmented Generation)技术让机器人能够基于特定文档回答from langchain.document_loaders import TextLoader from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import FAISS loader TextLoader(knowledge.txt) documents loader.load() embeddings HuggingFaceEmbeddings() db FAISS.from_documents(documents, embeddings) retriever db.as_retriever() qa RetrievalQA.from_chain_type( llmllm, chain_typestuff, retrieverretriever, memorymemory ) response qa.run(我们公司的退货政策是什么)5. 部署与优化完成开发后需要考虑如何将机器人部署到生产环境。5.1 构建Web接口使用FastAPI创建简单的HTTP服务from fastapi import FastAPI from pydantic import BaseModel app FastAPI() class Query(BaseModel): question: str user_id: str app.post(/chat) async def chat(query: Query): response conversation.run( questionquery.question, historyget_history(query.user_id) ) return {response: response}5.2 性能优化建议实际部署时需要考虑缓存机制对常见问题缓存响应速率限制防止API滥用监控跟踪响应时间和质量回退策略当主模型不可用时使用轻量级替代方案from langchain.cache import InMemoryCache from langchain.callbacks import get_openai_callback langchain.llm_cache InMemoryCache() with get_openai_callback() as cb: response conversation.run(question复杂问题) print(f本次消耗token数: {cb.total_tokens})6. 处理常见问题在实际使用中开发者常会遇到一些典型问题。以下是解决方案6.1 响应速度慢优化策略调整max_tokens限制响应长度使用流式传输逐步显示结果对简单问题启用缓存# 流式响应示例 for chunk in conversation.stream(question长问题): print(chunk, end, flushTrue)6.2 回答质量不稳定改进方法优化提示工程设置更严格的停止序列添加后处理过滤from langchain.output_parsers import RegexParser parser RegexParser( regexrAnswer: (.*), output_keys[answer] ) prompt PromptTemplate( template问题: {question}\n回答规则:...\nAnswer: , input_variables[question], output_parserparser )6.3 处理敏感内容确保机器人不会生成不当内容from langchain.filters import SensitiveContentFilter filter SensitiveContentFilter() chain filter | conversation # 组合过滤器 response chain.run(question敏感问题)7. 完整代码示例将所有功能整合到一个可运行的脚本中# chatbot_full.py import os from dotenv import load_dotenv from langchain.llms import ChatGLM from langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemory from fastapi import FastAPI import uvicorn load_dotenv() # 初始化模型 llm ChatGLM( api_keyos.getenv(CHATGLM_API_KEY), endpointos.getenv(CHATGLM_API_BASE), temperature0.7, max_tokens1024 ) # 配置记忆和对话链 memory ConversationBufferMemory() conversation ConversationChain( llmllm, memorymemory, verboseTrue ) # 创建Web服务 app FastAPI() app.get(/chat) async def chat(question: str): response conversation.run(question) return {response: response} if __name__ __main__: uvicorn.run(app, host0.0.0.0, port8000)启动服务后可以通过http://localhost:8000/chat?question你的问题进行测试。在实际项目中使用时有几个小技巧值得分享一是为不同用户维护独立的内存空间二是对API响应添加结构化解析三是实现对话状态的持久化存储。这些措施能显著提升用户体验和系统可靠性。

更多文章