当前位置: 首页 > article >正文

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响应添加结构化解析三是实现对话状态的持久化存储。这些措施能显著提升用户体验和系统可靠性。

相关文章:

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

Langchain实战:如何用ChatGLM-4搭建你的第一个AI对话机器人(附完整代码) 最近两年,大模型技术以惊人的速度渗透到各个领域。从智能客服到内容创作,从代码生成到数据分析,AI对话机器人正在重塑人机交互的方式…...

终极指南:如何安全迁移艾尔登法环游戏存档

终极指南:如何安全迁移艾尔登法环游戏存档 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 你是否曾经因为更换电脑或重装系统而担心丢失《艾尔登法环》数十小时的游戏进度?手动复制存档…...

UDOP-largeGPU利用率提升:懒加载+推理缓存降低峰值显存占用

UDOP-large GPU利用率提升:懒加载推理缓存降低峰值显存占用 1. 引言:当大模型遇上显存瓶颈 如果你部署过大型AI模型,大概率遇到过这个头疼的问题:模型加载时,显存瞬间被占满,GPU利用率却低得可怜。这就像…...

COCO数据集常见问题解答:下载慢?解压失败?目录结构不对?

COCO数据集实战避坑指南:从下载到配置的全流程解决方案 当你第一次接触COCO数据集时,可能会被它庞大的规模和复杂的目录结构吓到。作为计算机视觉领域最常用的基准数据集之一,COCO确实为模型训练和评估提供了丰富的资源,但在实际使…...

分析管理化技术数据挖掘与预测分析

数据驱动决策:管理技术中的挖掘与预测 在数字化时代,企业每天生成海量数据,如何从中提取价值成为关键。分析管理化技术通过数据挖掘与预测分析,帮助组织优化运营、降低成本并提升竞争力。数据挖掘从历史数据中发现模式&#xff0…...

基于File-Based App开发MVP项目托

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成,将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

【QML】自定义模块的创建与单例模式实践指南

1. 为什么需要自定义QML模块? 在QtQuick应用开发中,随着项目规模扩大,把所有QML文件堆在一起会变得难以维护。想象一下你家的工具箱——如果所有工具都散落在抽屉里,找起来肯定费劲。而自定义模块就像给工具分门别类:螺…...

当JetBrains IDE试用期突然到期,你该怎么办?

当JetBrains IDE试用期突然到期,你该怎么办? 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 深夜两点,你正专注地调试一个棘手的bug,手指在键盘上飞舞,代…...

dspic33硬件设计避坑指南:IO口上下拉与开漏配置的5个常见错误

dsPIC33硬件设计避坑指南:IO口上下拉与开漏配置的5个常见错误 在嵌入式硬件设计中,dsPIC33系列微控制器因其高性能和丰富的外设资源而广受欢迎。然而,即使是经验丰富的硬件工程师,在PCB设计阶段也常常会在IO口的上下拉电阻和开漏输…...

AWS WAF 自定义扫描器 User-Agent 拦截规则:从设计到踩坑的完整实践

通过自定义 Regex Pattern Set 拦截已知扫描器工具的 User-Agent,减少恶意扫描流量。本文记录完整的规则设计、部署、误拦截排查与修复过程,含生产事故复盘。 目录 背景与目标 方案设计 规则创建与部署 效果验证 跨 WebACL 部署与生产事故 事故复盘与修复...

Xilinx DSP48 Macro流水线深度怎么调?一个配置项让你的设计频率翻倍

Xilinx DSP48 Macro流水线深度优化实战:突破性能瓶颈的关键策略 在高速数字信号处理领域,FPGA设计者经常面临一个经典难题——如何在有限的硬件资源下实现更高的运算频率。当我们使用Xilinx DSP48 Macro进行复杂运算时,默认的"Auto"…...

不满意Oh My Zsh启动卡顿,来试试Starship吧坷

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

接口测试——pytest框架续集倚

智能体时代的代码范式转移与 C# 的战略转型 传统的 C# 开发模式,即所谓的“工程导向型”开发,要求开发者创建一个复杂的项目结构,包括项目文件(.csproj)、解决方案文件(.sln)、属性设置以及依赖…...

Jasmine漫画浏览器:跨平台阅读的终极解决方案,打造你的个人漫画图书馆

Jasmine漫画浏览器:跨平台阅读的终极解决方案,打造你的个人漫画图书馆 【免费下载链接】jasmine A comic browser,support Android / iOS / MacOS / Windows / Linux. 项目地址: https://gitcode.com/gh_mirrors/jas/jasmine 你是否经…...

所谓面试造火箭,其实只看这4种能力

文章目录前言一、先搞清楚:面试官到底在焦虑什么?二、第一种能力:把复杂问题剁碎了的本事2.1 什么叫"问题拆解"?2.2 怎么练这个能力?三、第二种能力:承认自己不知道的底气3.1 "不知道"…...

Windows经典游戏兼容性修复完整方案:DDrawCompat让老游戏在现代系统重获新生

Windows经典游戏兼容性修复完整方案:DDrawCompat让老游戏在现代系统重获新生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com…...

如何快速掌握FanControl:Windows风扇智能控制的终极免费方案

如何快速掌握FanControl:Windows风扇智能控制的终极免费方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...

如何用番茄小说下载器构建个人数字图书馆:5步快速入门指南

如何用番茄小说下载器构建个人数字图书馆:5步快速入门指南 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 在网络小说阅读日益流行的今天,你是否遇到过这样的困扰&a…...

基于Docker的NextCloud与OnlyOffice无缝集成方案

1. 为什么需要NextCloud与OnlyOffice集成 如果你正在寻找一套私有化的协同办公解决方案,NextCloudOnlyOffice的组合绝对值得考虑。NextCloud作为开源的云存储平台,提供了文件管理、日历、联系人等基础功能,而OnlyOffice则是功能强大的在线文档…...

SBTI打不开?手把手教你部署自己的人格测试(附源码链接)

网站打不开?部署自己的SBTI人格测试(附源码链接) 最近在B站刷到了一个很火的SBTI人格测试,觉得挺有意思的。作为一名开发者,我决定自己动手实现一个可以本地部署的版本。本文将带你从零开始,用Flask框架搭…...

Zemax多重结构仿真分光板的光路设计与优化

1. 分光板光路仿真的核心挑战 在光学系统设计中,分光板是实现光束分束的关键元件。传统单一路径仿真无法准确模拟分光板同时产生的透射和反射光路,这正是Zemax多重结构功能大显身手的地方。我曾在激光雷达接收端设计中,就遇到过需要同时分析分…...

告别云函数和自建域名:手把手教你用CDN和合法域名搭建CobaltStrike 4.9.1匿名基础设施

红队基础设施匿名化实战:基于CDN与合法域名的CobaltStrike 4.9.1架构设计 在攻防对抗的持续升级中,红队基础设施的隐蔽性与抗溯源能力已成为决定行动成败的关键因素。传统云函数方案虽然降低了部署门槛,但其高度标准化的流量特征和有限的配置…...

别再只用Entity了!Cesium性能优化实战:用Primitive实例化渲染1000个建筑模型

突破Cesium性能瓶颈:用Primitive实例化渲染千级建筑模型的实战指南 当数字孪生城市项目需要展示数千栋建筑时,Entity API的便捷性反而成为性能杀手——帧率骤降、交互卡顿成为常态。这并非Cesium引擎的极限,而是我们尚未掌握其底层渲染能力的…...

树莓派与PC间无线视频流传输:基于Python和OpenCV的实时图像处理方案

1. 项目背景与需求分析 当你用树莓派做自动驾驶小车或者远程监控项目时,最头疼的问题之一就是实时视频传输。传统SSH方式虽然能显示图像,但就像用老旧水管输水——流量一大就卡顿,连带机电控制也受影响。我去年做智能巡检机器人时就踩过这个坑…...

FPGA开发中通信协议与接口的选型策略与实战场景解析

1. FPGA通信协议与接口选型的核心考量因素 第一次接触FPGA通信选型时,我被各种协议参数搞得晕头转向。直到在工业控制项目中因为选错协议导致数据丢包,才真正理解"没有最好的协议,只有最合适的方案"这句话的含义。选型就像给不同性…...

G-Helper:拯救华硕笔记本性能的3个关键技巧与实战指南

G-Helper:拯救华硕笔记本性能的3个关键技巧与实战指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sc…...

Dify平台上的LiuJuan20260223Zimage模型部署与优化

Dify平台上的LiuJuan20260223Zimage模型部署与优化 在当今AI应用快速发展的背景下,高效部署和优化模型成为很多开发者的实际需求。本文将分享在Dify平台上部署LiuJuan20260223Zimage模型的实践经验,帮助你在生产环境中获得更好的性能和稳定性。 1. 理解L…...

Verilog数组操作实战:从基础到高级赋值技巧

1. Verilog数组基础:从零开始理解硬件数据结构 第一次接触Verilog数组时,我完全被那些方括号搞晕了。直到在项目中真正用上数组,才发现它简直是硬件描述语言中的瑞士军刀。简单来说,Verilog数组就是一组整齐排列的数据盒子&#x…...

手把手教你用Simulink搭建二极管钳位型三电平SVPWM闭环系统(附模型下载)

从零构建三电平逆变器仿真:Simulink实战指南 在电力电子领域,三电平逆变器因其优异的谐波性能和效率优势,已成为中高压应用的首选拓扑。而二极管钳位型结构凭借其简单的实现方式,让工程师能够以较低成本获得高质量的输出波形。本文…...

、SEATA分布式事务——XA模式煞

MySQL 中的 count 三兄弟:效率大比拼! 一、快速结论(先看结论再看分析) 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的!我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄…...