资讯动态

LangChain.js 示例工程实战:examples 目录的构建、环境变量配置与单例运行机制

发布时间:2026/9/13 2:56:04 来源:尧图企业网站定制
LangChain.js 示例工程实战examples 目录的构建、环境变量配置与单例运行机制【免费下载链接】langchainjsThe agent engineering platform项目地址: https://gitcode.com/GitHub_Trending/la/langchainjsexamples/是 LangChain.js monorepo 中承载全部可运行样例的独立 workspace 包官方通过一个统一的运行入口examples/src/index.ts支持以一条命令执行任意示例。本文围绕 examples 目录说明文档 讲解从源码构建、API Key 配置到运行单个示例的完整流程并深入剖析 runner 的路径归一化、动态加载与回调收尾机制帮助你快速在本地复现仓库中任意一个 Agent、模型调用或向量库示例。examples 在 monorepo 中的定位LangChain.js 仓库是一个 pnpm workspace 多包结构。从 pnpm-workspace.yaml 可以看到workspace 成员包括libs/*、libs/providers/*、examples和internal/*其中examples与核心库平级是专门用于演示“如何把各包组合使用”的消费方。从 examples/package.json 的依赖清单可以看到它扮演的角色workspace 内部依赖langchain/core、langchain、langchain/classic、langchain/openai、langchain/anthropic、langchain/google-genai等大量workspace:*依赖即示例直接引用本仓库内正在开发的包而不是 npm 上的发布版本外部生态依赖pinecone-database/pinecone、qdrant/js-client-rest、weaviate-client、zilliz/milvus2-sdk-node、chromadb、firebase-admin等对应各向量库/存储服务的集成示例运行工具链devDependencies 中的tsx直接执行 TypeScript、dotenv加载.env、typescript ~7.0.2编译产物。examples/tsconfig.json 则通过references显式引用了../libs/langchain-core、../libs/langchain-classic、../libs/providers/*等约 30 个工程说明示例的编译与 workspace 内各包保持项目引用关系rootDir为src、outDir为dist。需要特别说明的是examples包的private: true它不会被发布到 npm只服务于仓库内示例的运行与验证。第一步构建依赖的 langchain 包README 明确给出的前置操作是大多数示例直接依赖本仓库源码的构建产物因此先从仓库根目录执行pnpm install pnpm buildpnpm install完成 workspace 全量依赖安装包括把libs/*各包以workspace:*形式链接进 examples 的 node_modulespnpm build通过仓库根的 Turbo 流水线构建各库的 dist 产物。对于使用pnpm run starttsx 直跑 TypeScript的路径来说构建产物主要用于类型与包解析而对于start:dist路径构建则是硬前提见后文。第二步配置 API Key.env 机制README 指出“大多数示例需要 API key”仓库在examples/目录提供了模板文件cd examples cp .env.example .env然后编辑.env把对应占位值替换成真实密钥。examples/.env.example 覆盖了示例涉及的主要服务例如模型提供商ANTHROPIC_API_KEY、OPENAI_API_KEY、GOOGLE_PALM_API_KEY、COHERE_API_KEY、HUGGINGFACEHUB_API_KEYAzure OpenAI一组AZURE_OPENAI_*变量API Key、实例名、各部署名、API 版本、Base Path模板中以行内注释标出了在 Azure Portal 中的取值位置向量库与存储PINECONE_API_KEY、WEAVIATE_HOST/WEAVIATE_API_KEY、ELASTIC_URL系列、ASTRA_DB_*、REDIS_URL、AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_REGION等。.env之所以能被示例读取是因为 examples 的两个运行脚本都带有-r dotenv/config参数见下文脚本原文Node 启动时即完成环境变量注入。示例代码里通常以process.env.XXX直接取值——仓库内大量示例文件如examples/src/cache/、examples/src/langchain-classic/indexes/vector_stores/下的脚本均依赖这一约定。第三步用统一入口运行单个示例README 给出的核心命令是从examples/目录执行pnpm run start path to example对应 examples/package.json 中的脚本定义start: tsx --experimental-wasm-modules -r dotenv/config src/index.ts拆解这条命令tsx直接执行 TypeScript无需预编译示例源码即跑--experimental-wasm-modules开启实验性 WASM 模块支持供个别示例中使用的 WASM 依赖-r dotenv/config加载.envsrc/index.ts所有示例共用的 runner 入口。README 的示例命令pnpm run start ./src/prompts/few_shot.ts中的prompts/few_shot.ts路径在当前仓库examples/src/下已不存在目录结构随版本演进有所调整。实际可选的示例路径请以 examples/src 现有子目录为准例如运行最简的 OpenAI 模型调用示例pnpm run start ./src/llms/openai.ts该示例 examples/src/llms/openai.ts 展示了典型的 runner 约定import { OpenAI } from langchain/openai; export const run async () { const model new OpenAI({ model: gpt-4, temperature: 0.7, maxTokens: 1000, maxRetries: 5, }); const res await model.invoke( Question: What would be a good company name a company that makes colorful socks?\nAnswer: ); console.log({ res }); };runner 机制深读src/index.ts 做了什么统一入口 examples/src/index.ts 只有 56 行但它定义了仓库示例的三条运行契约1. 路径归一化L12-L30。入口允许传入任意前缀变体代码中用一串startsWith判断依次剥掉./examples/、examples/、./src/、./dist/、src/、dist/前缀得到相对src/的裸路径后再拼接加载。因此下面几种写法等价pnpm run start ./src/llms/openai.ts pnpm run start src/llms/openai.ts pnpm run start ./examples/src/llms/openai.ts这也解释了为什么start和start:dist可以共用同一个入口逻辑。2. 动态导入与run导出约定L32-L43。入口通过await import(path.join(...))动态加载示例模块并解构出模块导出的run函数。若模块未导出run加载失败会抛出Could not load example ...错误加载成功但没有run导出时runner 静默结束。仓库中因此存在两种示例写法显式导出export const run async () { ... }的模块如上文llms/openai.ts依赖顶层await自执行的脚本——例如 examples/src/createAgent/tools.ts 直接await agent.invoke(...)动态 import 时副作用即完成runner 随后发现无run导出便结束。3. 异步收尾与错误呈现L45-L55。当run返回 Promise 时入口用.catch打印Example failed with:及完整错误并在.finally中调用awaitAllCallbacks()——它来自langchain/core/callbacks/promises用于等待 LangChain 回调如 tracer、日志 handler全部落盘避免进程提前退出导致追踪/日志被截断。这是示例能够完整输出 LangSmith 等追踪链路的关键收尾动作。另外注意入口把process.argv.slice(2)中第一个参数之后的内容作为args传给run即示例函数可以接收命令行透传的额外参数run(args)。使用转译后的 JS 运行start:distREADME 的第二种运行方式是“通常不需要但如果你想用转译后的 JS 运行示例”pnpm run start:dist ./dist/prompts/few_shot.js对应脚本为build: tsc --declaration --outDir dist/, start:dist: pnpm build node -r dotenv/config dist/index.js即先用tsc把src/编译到dist/声明文件输出到 dist再用node -r dotenv/config直接执行编译产物中的入口随后按同样规则加载dist/下的示例.js。适用前提是已完成构建脚本本身内置了pnpm build且路径指向.js产物当需要排查“tsx 转译层”与“tsc 产物”行为差异时这条路径很有价值。示例目录组织与选型examples/src/下的目录结构本身就是一份“API 能力地图”createAgent/新版createAgent的各类进阶玩法含middleware/human-in-the-loop、摘要、模型/工具调用限制、prompt caching、LLM 工具选择器等、dynamicTools/、structuredOutput.ts、supervisor.ts、streaming.ts等llms/各家模型的最短调用路径openai.ts、azure_openai.ts、googlevertexai.ts及流式变体multi-agent/handoffs、router、subagents、skills 等编排示例langchain-classic/经典 API 面chains、prompts、memory、indexes/vectorstores、retrievers、tools 等数十个模块适合对照经典工作流学习cache/、extraction/、provider/缓存、结构化抽取与特定 provider 演示。选择示例时建议按“先llms/验证密钥连通再进入目标功能目录”的顺序每个目录内的文件名基本自描述配合对应 provider 的package.json依赖即可判断所需的环境变量在 examples/.env.example 中检索同名前缀即可。小结与适用前提前置条件pnpm 环境从仓库根目录执行pnpm install pnpm build在examples/内复制并填写.env。标准姿势pnpm run start path用 tsx 直跑 TS 源码路径前缀./src、src、./examples/src均可需要验证编译产物时用pnpm run start:dist dist 下 .js 路径。示例契约示例模块要么导出run异步函数要么以顶层await自执行入口负责路径归一化、动态加载、错误打印与awaitAllCallbacks()回调收尾。README 中引用的个别示例路径如prompts/few_shot.ts可能随版本演进而失效实际运行前请以examples/src/当前目录结构为准。掌握以上机制后你可以把examples/当作 LangChain.js 的活教材任何功能不确定如何组合时先在这里找到最短可运行示例再顺着 import 进入libs/中的对应源码。【免费下载链接】langchainjsThe agent engineering platform项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价