11-真实LangChain接入指南
核对日期:2026-05-18
官方资料:JS overview https://docs.langchain.com/oss/javascript/langchain/overview;Agents https://docs.langchain.com/oss/javascript/langchain/agents;Tools https://docs.langchain.com/oss/javascript/langchain/tools;Models https://docs.langchain.com/oss/javascript/langchain/models。
目标
本仓库默认用离线 runtime,是为了让学习者不依赖 API Key 也能跑通工具、RAG、记忆和 eval。真实项目要把 src/core/agent-runtime.ts 替换为官方 LangChain 包和 provider 集成。本章给出迁移顺序,不让你在第一天就把所有代码改成不可调试的黑盒。
机制
迁移分三层:
第一层只替换模型;第二层替换 tool binding 和 agent loop;第三层接 trace、checkpointer、store、HITL。这样做可以隔离变量:如果第一层就失败,问题只在 provider 配置或模型调用,不会混入 RAG 和审批逻辑。
TypeScript 接入顺序
1. 安装官方包
按目标 provider 选择官方集成包。示例命令要以官方文档为准:
npm install langchain @langchain/core zod
# provider 包按实际选择安装,例如 OpenAI、Anthropic、Google、Ollama 等集成。
不要在源码里写 key;使用 .env,并把 .env 加入 .gitignore。
2. 建立 model factory
目标是把 provider 细节收敛到一个文件,业务代码只拿 chatModel。
import { z } from "zod";
const envSchema = z.object({
LLM_PROVIDER: z.enum(["openai", "anthropic", "ollama"]),
MODEL_NAME: z.string().min(1),
});
export function loadModelConfig(env: NodeJS.ProcessEnv) {
return envSchema.parse(env);
}
真实 provider 初始化请按官方文档填写 import path。不要把 provider SDK 的异常直接抛给用户层,应转成统一错误。
3. 迁移 tool
本仓库的工具形状:
tool({
name: "search_knowledge_base",
schema: z.object({ query: z.string() }),
execute: async ({ query }) => search(query),
});
迁移原则:
- schema 保持不变。
- execute 内部继续走 Tool Gateway 或内部服务。
- 权限检查留在业务层,不靠模型 description。
- 工具输出继续走结构化类型,不返回 provider 原始对象。
4. 迁移 agent
Agent 迁移时保留三类测试:
| 测试 | 为什么必须保留 |
|---|---|
| tool schema 失败 | 证明模型或调用层不能绕过参数校验 |
| 权限拒绝 | 证明真实 Agent 不会调用隐藏工具 |
| structured output | 证明输出仍可被业务消费 |
5. 接 LangSmith
接入 trace 后先检查脱敏:
- prompt 是否包含用户隐私。
- tool output 是否包含内部 URL、token、堆栈。
- RAG 文档是否允许进入外部观测平台。
- trace id 是否能关联业务 request id。
Python 差异
Python 侧常见迁移路径是 create_agent、Pydantic schema、provider 包和 LangGraph checkpointer/store。TypeScript 侧常见 zod schema 和 JS provider 包。不要直接复制 Python import;只复制概念和测试用例。
工程边界
| 边界 | 推荐做法 |
|---|---|
| provider key | 环境变量或密钥管理服务 |
| prompt 版本 | 文件化或配置化,进入 review |
| tool 权限 | 后端 policy,不写在 prompt |
| eval dataset | JSON/数据库版本化,CI 运行 |
| trace | 脱敏后保存,设置保留周期 |
常见反模式
| 反模式 | 后果 |
|---|---|
| 一次性替换所有 mock | 失败时不知道是模型、工具还是 RAG 出问题 |
| 真实 key 写进 README 示例 | 容易泄露 |
| 只在本地手动试聊 | 换模型或 prompt 后回归不可见 |
| 把 provider 错误原样返回 | 泄露内部实现和调试信息 |
验收清单
- 没有
.env、key、token 被提交。 -
npm test仍通过。 - 至少 1 个真实 provider smoke test 可手动运行。
- 离线 eval 和真实 provider eval 结果分别记录。
- trace 中没有敏感字段。
- 工具权限测试没有因为接官方 Agent 失效。
练习任务
- 新增
src/live/model-factory.ts,只做配置校验,不接真实 provider。 - 选一个 provider,按官方文档写 live smoke test,但默认不在 CI 中运行。
- 把企业知识库 Agent 的 answer schema 保持不变,只替换生成答案的模型调用。