大模型应用
用 LangChain 1.x 与 LangGraph…
在需要构建 AI Agent、多步 LLM 工作流、对话记忆或文档处理管线时,用 LangChain 1.x + LangGraph 的架构模式落地。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 LangChain 1.x 与 La通用
解决思路
- 按包结构分层组织依赖:langchain(高层编排)、langchain-core(消息/提示/工具等核心抽象)、langchain-community(第三方集成)、langgraph(Agent 编排与状态管理),并按模型/向量库拆分为 langchain-openai、langchain-anthropic、langchain-voyageai、langchain-pinecone 等独立包。
- 用 LangGraph 作为构建 Agent 的标准方案,利用其 StateGraph 显式状态管理、Durable Execution 持久执行、Human-in-the-Loop 人工介入、短期/长期记忆、Checkpointing 检查点保存与恢复能力。
- 根据任务选择 Agent 模式:ReAct(用 create_react_agent 实现推理+行动)、Plan-and-Execute(规划与执行节点分离)、Multi-Agent(Supervisor 在专用 Agent 间路由)、Tool-Calling(用 Pydantic schema 做结构化工具调用)。
- 用 TypedDict 定义显式状态:简单场景继承 MessagesState 并追加自定义字段(如 context),复杂 Agent 用 CustomState 定义 messages、context、current_step、results 等字段,并用 Annotated 标注字段含义。
- 按对话长度选择记忆实现:ConversationBufferMemory(短对话存全部消息)、ConversationSummaryMemory(长对话摘要旧消息)、ConversationTokenBufferMemory(按 token 窗口)、VectorStoreRetrieverMemory(语义相似检索)、LangGraph Checkpointers(跨会话持久状态)。
- 文档处理管线拆成四类组件:Document Loaders 加载多来源文档、Text Splitters 智能分块、Vector Stores 存储与检索 embedding、Retrievers 拉取相关文档。
- 用 LangSmith 做可观测性:记录请求/响应、追踪 token 用量、监控延迟、跟踪错误、可视化 trace。
- 用 create_react_agent 快速搭建 ReAct Agent:初始化 LLM(如 ChatAnthropic(model="claude-sonnet-5")),用 @tool 装饰器定义工具(如 search_database、calculate),传入 tools 列表和 MemorySaver checkpointer,通过 config={"configurable": {"thread_id": "user-123"}} 维持记忆,用 await agent.ainvoke({"messages": [("user", "...")]}, config) 调用。
- 实现 calculate 工具时用 ast 安全求值:定义 allowed_operators 映射 ast.Add/Sub/Mult/Div/Pow/Mod/USub 到 operator 函数,递归 _eval 处理 ast.Constant、ast.BinOp、ast.UnaryOp,用 ast.parse(expression, mode='eval') 解析,异常时返回错误字符串。
- 测试 Agent 工具选择:用 pytest.mark.asyncio + unittest.mock.patch.object 模拟 llm.ainvoke 返回 AsyncMock(content="Using search_database"),断言结果中包含工具名。
- 测试记忆持久化:用同一 thread_id 连续两次 ainvoke,第一次让 Agent 记住信息(如 "Remember: the code is 12345"),第二次询问该信息,断言结果中包含之前记住的内容。
- 用 Redis 做 LLM 缓存:通过 redis.Redis.from_url("redis://localhost:6379") 创建客户端,用 set_llm_cache(RedisCache(redis_client)) 全局启用。
- 用 asyncio.gather 做异步批量文档处理:对每个文档先 split_documents 分块,再用 embeddings_model.aembed_documents 批量生成 embedding,返回 doc_id 与 embeddings。
- 复用向量库客户端做连接池:用 Pinecone(api_key=os.environ["PINECONE_API_KEY"]) 创建一次客户端,pc.Index("my-index") 获取索引,再用 PineconeVectorStore(index=index, embedding=embeddings) 构建向量库,避免重复建连。
- 当导航层信息不足时,阅读 references/details.md 获取详细模式与完整示例。
适用边界 · 注意事项
- 不使用 LangChain/LangGraph 生态、或不需要 Agent/记忆/状态管理能力的简单 LLM 调用场景。
- 无法安装 langchain、langgraph 及其相关集成包(如 langchain-anthropic、langchain-pinecone)的环境。
- 不需要持久化记忆、检查点或人工介入的纯一次性无状态推理任务。