Skip to content

常见问题

更新: 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: 工具调用失败如何处理?

常见错误类型

错误类型原因解决方案
RateLimitErrorAPI 限流重试 + 退避
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:]

更多问题?

如果遇到其他问题,建议:

  1. 查看官方文档: https://python.langchain.com/
  2. 搜索 GitHub Issues: https://github.com/langchain-ai/langchain
  3. 加入 Discord 社区: https://discord.gg/langchain
  4. LangSmith 调试: 使用 LangSmith 追踪具体问题

参考资源

资源链接
LangChain 主站https://python.langchain.com/
LangChain GitHubhttps://github.com/langchain-ai/langchain
LangGraph 文档https://langchain-ai.github.io/langgraph/
LangSmithhttps://smith.langchain.com/
API Referencehttps://api.python.langchain.com/

本文档最后更新:2026-04-09

Released under the MIT License.