深度解析LangChain:我是如何基于Agent拓扑构建智能助手的
2026/6/2 1:45:19 网站建设 项目流程

深度解析LangChain:我是如何基于Agent拓扑构建智能助手的

前言

最近在做智能助手项目时,需要集成多个工具和数据源。

一开始用传统方式写,代码很快变得难以维护。后来尝试了LangChain,发现它提供了一套优雅的Agent拓扑设计模式。

这篇文章分享我基于LangChain构建智能助手的实践经验。

一、底层原理

1.1 核心机制

LangChain的核心是通过Chain模式串联多个组件:

graph TD A[用户输入] --> B[LLM Chain] B --> C{需要工具?} C -->|是| D[Tool Chain] C -->|否| E[直接响应] D --> F[执行工具] F --> G[结果汇总] G --> H[最终响应]

核心组件:

组件功能作用
LLM大语言模型核心推理引擎
PromptTemplate提示词模板格式化输入
Chain链式调用串联多个步骤
Tool工具调用外部能力扩展
Memory记忆管理会话状态

1.2 与同类方案的对比

框架灵活性生态丰富度学习曲线
LangChain中等
LangFlow
Semantic Kernel中等
自定义实现最高

二、快速上手

from langchain.chains import LLMChain from langchain.llms import OpenAI from langchain.prompts import PromptTemplate # 创建LLM实例 llm = OpenAI(temperature=0.7) # 定义提示词模板 template = """ 你是一个专业的技术顾问。 用户问题:{question} 请给出详细的解答: """ prompt = PromptTemplate( input_variables=["question"], template=template ) # 创建Chain chain = LLMChain(llm=llm, prompt=prompt) # 运行Chain result = chain.run(question="什么是LangChain?") print(result)

三、核心 API / 深水区

3.1 核心方法速查

方法功能适用场景
LLMChain.run()执行单个Chain简单任务
SequentialChain()串联多个Chain复杂流程
RouterChain()根据条件选择Chain分支逻辑
RetrievalQA()检索增强问答知识库问答
AgentExecutor()Agent执行器工具调用

3.2 生产级配置

from langchain.chains import SequentialChain from langchain.chat_models import ChatOpenAI # 创建多个Chain summarize_chain = LLMChain( llm=ChatOpenAI(temperature=0), prompt=summarize_prompt, output_key="summary" ) analyze_chain = LLMChain( llm=ChatOpenAI(temperature=0), prompt=analyze_prompt, output_key="analysis" ) # 串联成顺序Chain overall_chain = SequentialChain( chains=[summarize_chain, analyze_chain], input_variables=["text"], output_variables=["summary", "analysis"] ) # 执行 result = overall_chain({ "text": "这是一段需要处理的文本..." })

3.3 高级定制

# 自定义Tool from langchain.tools import BaseTool class CalculatorTool(BaseTool): name = "calculator" description = "用于计算数学表达式" def _run(self, expression: str) -> str: try: result = eval(expression) return f"计算结果: {result}" except Exception as e: return f"计算错误: {str(e)}" def _arun(self, expression: str) -> str: return self._run(expression)

四、实战演练

场景:构建智能客服Agent

from langchain.agents import initialize_agent, AgentType from langchain.tools import GoogleSearchRun # 初始化工具 search = GoogleSearchRun() calculator = CalculatorTool() tools = [search, calculator] # 初始化Agent agent = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True ) # 运行Agent result = agent.run("北京今天的天气怎么样?") print(result)

五、避坑指南与最佳实践

💡 技巧:使用Memory管理会话

from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory(memory_key="chat_history") chain = LLMChain( llm=llm, prompt=prompt, memory=memory ) # 多轮对话 chain.run(input="你好") chain.run(input="我叫张三") chain.run(input="我刚才说我叫什么?")

⚠️ 警告:注意Token消耗

# 错误示例:无限制调用 def badCall(input_text): chain = LLMChain(llm=llm, prompt=prompt) return chain.run(input_text) # 正确做法:添加长度限制 def goodCall(input_text, max_tokens=1000): llm = OpenAI(max_tokens=max_tokens) chain = LLMChain(llm=llm, prompt=prompt) return chain.run(input_text)

✅ 推荐:使用异步API

from langchain.chat_models import ChatOpenAI llm = ChatOpenAI( model_name="gpt-4", temperature=0, max_tokens=1000 ) # 异步调用 async def asyncCall(prompt): result = await llm.agenerate([prompt]) return result.generations[0][0].text

六、综合实战演示

from langchain import OpenAI, ConversationChain from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.memory import ConversationBufferMemory class SmartAssistant: def __init__(self): self.llm = OpenAI(temperature=0.7) self.memory = ConversationBufferMemory() # 定义欢迎语模板 self.welcome_prompt = PromptTemplate( input_variables=["user_name"], template="欢迎回来,{user_name}!请问有什么可以帮您的?" ) # 定义对话模板 self.chat_prompt = PromptTemplate( input_variables=["history", "input"], template=""" 对话历史: {history} 用户:{input} 助手: """ ) self.chat_chain = LLMChain( llm=self.llm, prompt=self.chat_prompt, memory=self.memory ) def greet(self, user_name): return self.welcome_prompt.format(user_name=user_name) def chat(self, input_text): return self.chat_chain.run(input=input_text) # 使用示例 assistant = SmartAssistant() print(assistant.greet("码龙大大")) print(assistant.chat("什么是LLM?")) print(assistant.chat("它和传统AI有什么区别?"))

七、总结

LangChain是大模型应用开发的瑞士军刀。

核心要点:

  1. 使用Chain模式组织复杂逻辑
  2. 通过Tool扩展外部能力
  3. 利用Memory管理会话状态
  4. 选择合适的Agent类型

核心收获:好的架构设计能让AI应用开发事半功倍。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询