常见问题
更新: 4/9/2026 字数: 0 字 时长: 0 分钟
本章汇总 LangChain Agent 开发中的常见问题及解决方案。
Q1: Agent 进入死循环怎么办?
解决方案
python
# 方法一:限制迭代次数
from typing import TypedDict, Literal
class LimitedState(TypedDict):
messages: list
iteration: int
def check_limit(state: LimitedState) -> Literal["continue", "end"]:
if state.get("iteration", 0) >= 5:
return "end"
return "continue"
# 方法二:添加停止关键词
SYSTEM_PROMPT = """
重要规则:
1. 当你知道答案时,直接回答
2. 不要重复调用工具
3. 使用 <FINAL_ANSWER> 标签包裹最终答案
"""Q2: 工具调用失败如何处理?
常见错误类型
| 错误类型 | 原因 | 解决方案 |
|---|---|---|
RateLimitError | API 限流 | 重试 + 退避 |
TimeoutError | 请求超时 | 增加超时 / 重试 |
ValidationError | 参数错误 | 验证输入 |
AuthError | 认证失败 | 检查 API Key |
处理策略
python
@tool
def safe_search(query: str) -> str:
try:
result = search_api(query)
return result
except RateLimitError:
return "搜索服务暂时繁忙,请稍后再试"
except TimeoutError:
return "搜索超时,请检查网络或稍后重试"
except Exception as e:
logger.error(f"Search error: {str(e)}")
return "搜索服务暂时不可用"Q3: 如何选择 Agent 类型?
选择指南
Agent 类型选择
────────────────────────────────────────────────────────
需要快速构建? 需要复杂控制?
│ │
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ create_agent │ │ StateGraph │
│ (高级 API) │ │ (底层框架) │
└─────────┬─────────┘ └─────────┬─────────┘
│ │
┌─────┴─────┐ ┌──────┴──────┐
▼ ▼ ▼ ▼
单 Agent 多 Agent 简单状态 复杂状态
简单工具 协作 管理 自定义流程场景对照
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 简单问答 | create_agent | 零配置 |
| 带记忆的对话 | create_agent + checkpointer | 持久化 |
| 意图路由 | create_agent 数组 + 调度 | 灵活分配 |
| 多步骤工作流 | LangGraph | 完整控制 |
Q4: 记忆系统如何选择?
Checkpointer 对比
| 类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
InMemorySaver | 开发/测试 | 快速、简单 | 不持久化 |
SqliteSaver | 小规模生产 | 无依赖 | 并发差 |
PostgresSaver | 大规模生产 | 稳定、可扩展 | 需运维 |
RedisSaver | 高并发 | 极快 | 内存成本 |
选择建议
python
# 开发环境:InMemorySaver
checkpointer = InMemorySaver()
# 小型应用:SQLite
from langgraph.checkpoint.sqlite import SqliteSaver
checkpointer = SqliteSaver.from_conn_string("checkpoints.db")
# 生产环境:PostgreSQL
from langgraph.checkpoint.postgres import PostgresSaver
checkpointer = PostgresSaver.from_conn_string(
"postgresql://user:pass@host:5432/db",
pool_size=10
)Q5: Token 超出限制怎么办?
解决方案
python
# 方案一:消息截断
from langchain_core.messages import trim_messages, get_buffer_string
def trim_to_limit(messages: list, max_tokens: int = 8000):
buffer = get_buffer_string(messages)
if len(buffer) > max_tokens * 4:
trimmer = trim_messages(
max_tokens=max_tokens,
strategy="last",
include_system=True
)
return trimmer.invoke(messages)
return messages
# 方案二:对话摘要
def summarize_old_messages(messages: list, llm) -> list:
if len(messages) <= 6:
return messages
# 保留系统消息 + 摘要 + 最近消息
summary = llm.invoke("请总结以下对话的要点:\n\n" + ...)
return system + [AIMessage(content=f"[摘要] {summary}")] + recent[-5:]更多问题?
如果遇到其他问题,建议:
- 查看官方文档: https://python.langchain.com/
- 搜索 GitHub Issues: https://github.com/langchain-ai/langchain
- 加入 Discord 社区: https://discord.gg/langchain
- LangSmith 调试: 使用 LangSmith 追踪具体问题
参考资源
| 资源 | 链接 |
|---|---|
| LangChain 主站 | https://python.langchain.com/ |
| LangChain GitHub | https://github.com/langchain-ai/langchain |
| LangGraph 文档 | https://langchain-ai.github.io/langgraph/ |
| LangSmith | https://smith.langchain.com/ |
| API Reference | https://api.python.langchain.com/ |
本文档最后更新:2026-04-09