LangChain作为当前AI应用开发领域的热门框架,其核心价值在于将大语言模型(LLM)的能力模块化、流程化。我在实际项目中深度使用LangChain近一年,最大的体会是它彻底改变了我们构建AI应用的范式——从原先的"单次问答"模式升级为"可编程工作流"模式。
框架主要由以下几个核心组件构成:
提示:LangChain最新版本(v0.1.0)已全面支持OpenAI函数调用特性,这对Agent开发是重大利好
最基本的LLMChain示例展示了如何串联提示词与模型调用。但实际项目中,我们更多使用SequentialChain这类复杂链结构。以下是我在电商客服系统中实现的订单处理链:
python复制from langchain.chains import TransformChain, SequentialChain
def extract_order_id(inputs):
return {"order_id": inputs["text"].split(":")[1].strip()}
extract_chain = TransformChain(
input_variables=["text"],
output_variables=["order_id"],
transform=extract_order_id
)
order_chain = LLMChain(
llm=llm,
prompt=ORDER_PROMPT,
output_key="order_status"
)
overall_chain = SequentialChain(
chains=[extract_chain, order_chain],
input_variables=["text"],
output_variables=["order_status"]
)
这个案例中有几个关键设计点:
当链中包含多个LLM调用时,响应延迟会成为瓶颈。通过以下策略可显著提升性能:
python复制async def run_chains():
results = await asyncio.gather(
chain1.arun(input1),
chain2.arun(input2)
)
python复制from langchain.cache import SQLiteCache
langchain.llm_cache = SQLiteCache(database_path=".langchain.db")
python复制chain = LLMChain(llm=llm, prompt=prompt)
for chunk in chain.stream({"input": "..."}):
print(chunk, end="", flush=True)
LangChain支持三种工具集成方式:
| 集成方式 | 适用场景 | 实现复杂度 | 示例 |
|---|---|---|---|
| 单工具Agent | 简单固定流程 | ★☆☆☆☆ | 仅调用搜索引擎 |
| 多工具Agent | 需要条件判断 | ★★★☆☆ | 根据问题选择计算器或搜索 |
| 自定义Agent | 复杂业务逻辑 | ★★★★★ | 电商售后处理流程 |
我在智能客服项目中采用的混合方案:
以下是处理退货请求的Agent完整实现:
python复制from langchain.agents import Tool, AgentExecutor
from langchain.agents import initialize_agent
def check_return_policy(order_id):
# 连接数据库查询订单信息
return "符合7天无理由退货条件"
tools = [
Tool(
name="PolicyChecker",
func=check_return_policy,
description="检查退货政策"
),
# 其他工具...
]
agent = initialize_agent(
tools,
llm,
agent="conversational-react-description",
verbose=True
)
response = agent.run("订单123456想退货")
实际部署时需要注意:
LangChain默认的错误处理较为简单,生产环境需要增强:
python复制from tenacity import retry, stop_after_attempt
@retry(stop=stop_after_attempt(3))
def safe_chain_run(chain, input_dict):
try:
return chain.run(input_dict)
except Exception as e:
log_error(e)
return "系统繁忙,请稍后再试"
常见故障场景处理方案:
完善的监控体系应包含:
推荐使用LangSmith进行全链路追踪:
python复制os.environ["LANGCHAIN_TRACING"] = "true"
以下是开发者常遇到的5个问题及解决方案:
Agent陷入循环
现象:连续选择相同工具
解决:设置max_iterations参数,添加循环检测逻辑
中文输出质量差
现象:英文回复正常但中文不通顺
解决:在prompt中明确指定"请用简体中文回答"
工具选择错误
现象:应该用计算器却调用了搜索引擎
解决:优化工具描述,添加示例(example)
长文本截断
现象:回复不完整
解决:设置max_tokens参数,或采用流式输出
变量传递失败
现象:链间数据丢失
解决:检查input_variables/output_variables的匹配关系
默认的ConversationBufferMemory适合简单场景,复杂业务需要定制记忆模块。比如实现基于Redis的分布式记忆:
python复制from langchain.schema import BaseMemory
import redis
class RedisMemory(BaseMemory):
def __init__(self, redis_url):
self.client = redis.from_url(redis_url)
def load_memory_variables(self, inputs):
conv_id = inputs["conversation_id"]
return {"history": self.client.get(f"chat:{conv_id}")}
def save_context(self, inputs, outputs):
conv_id = inputs["conversation_id"]
self.client.append(f"chat:{conv_id}", outputs["response"])
将LangChain与传统代码混合使用能获得更大灵活性。我在金融风控系统中的实现方案:
这种架构既保持了确定性规则的可靠性,又获得了AI的泛化能力。