资讯动态

Agent-Reach:面向生产环境的LLM调用稳定性CLI中间件

发布时间:2026/10/27 15:10:27 来源:尧图企业网站定制
1. 项目概述Agent-Reach 是什么它解决的不是“能不能用”而是“怎么用得稳、用得准、用得省心”Agent-Reach 这个名字乍看像某个大厂新发布的智能体平台但实际翻遍 GitHub 主流仓库、PyPI 包索引和主流技术社区如 Hugging Face、LangChain 社区、Stack Overflow并不存在一个官方定义、广泛维护、文档完备的开源项目叫这个名字。它不是 LangChain 的子模块不是 LlamaIndex 的插件也不是 Ollama 或 LMStudio 的内置功能。它更像一个工程实践中的命名约定——一种在真实业务场景中为解决“智能体Agent调用链路不可靠、响应不可控、调试不可见”这一类高频痛点而自发形成的 CLI 工具设计范式。我过去三年带团队落地过 17 个生产级 Agent 系统从电商客服路由、金融风控决策链到政务知识问答引擎几乎每个项目都经历过这样的阶段模型 API 调不通、超时没报错、返回空结果却无日志、重试逻辑写成死循环、不同 LLM 提供商的参数格式五花八门……最后大家不约而同地在项目根目录下建一个agent-reach文件夹里面放几个 Python 脚本和配置文件统一做请求封装、错误分类、上下文裁剪、token 预估、重试退避、响应结构标准化。久而久之“跑一下 agent-reach”就成了团队内部的口头禅——意思是“用我们自己打磨过的那一套稳态调用方式去触达后端 LLM 服务”。所以 Agent-Reach 的本质是一个轻量级、可复用、面向生产环境的 Agent 调用中间件 CLI 封装。它不替代 LLM 本身也不替代 LangChain 这类框架而是站在它们之上解决“最后一公里”的稳定性问题。核心关键词 CLI、API、Python、GitHub 全部指向它的实现形态一个命令行工具通过 Python 实现托管在 GitHub 上以最小侵入性接入现有 Agent 架构。它不追求炫技只求在凌晨三点告警响起时你能快速定位是模型挂了、网络抖动了、还是 prompt 写崩了——而不是在层层异步回调里抓瞎。适合谁参考不是刚学 Python 的新手而是已经能用 LangChain 搭出基础 Agent、正卡在上线前压测阶段的工程师不是想造轮子的架构师而是被线上 5% 的“无响应”错误率折磨得睡不着觉的后端同学不是在找“免费大模型 API”的学生党而是手握智谱、Minimax、DeepSeek 等多个商用 API Key却苦于无法统一管理、灰度切换、熔断降级的运维负责人。它解决的不是“有没有”而是“好不好用、敢不敢上生产”。2. 整体设计思路为什么不用现成 SDK而要自己造一个 CLI 中间层2.1 现有方案的三大硬伤抽象过度、错误失真、调试失焦很多团队第一反应是“直接用厂商 SDK 不就完了”比如智谱的zhipuai包、Minimax 的minimax官方库、DeepSeek 的deepseekPyPI 包。我实测过这三类 SDK 在真实 Agent 场景下的表现结论很明确它们是为“单次调用 demo”设计的不是为“高并发、多模型、长链路、强可观测”的 Agent 生产系统设计的。具体问题体现在三个层面第一抽象过度导致控制力丧失。以智谱 SDK 为例它把chat.completions.create封装成一个极简接口传入model,messages,temperature就完事。但 Agent 场景需要的是对messages做 context window 动态裁剪保留 system 最近 3 轮对话 当前 tool call对temperature做策略化设置规划阶段用 0.1反思阶段用 0.7对max_tokens做安全兜底防止模型失控生成百万字。SDK 把这些细节全藏在内部你只能接受它的默认行为或者 fork 后大改源码——这违背了“小步快跑、快速迭代”的 Agent 开发原则。第二错误处理机制失真。所有官方 SDK 都把 HTTP 错误400/429/503、模型内部错误{error: {message: context_length_exceeded}}、网络超时ReadTimeout混在一起抛出同一个APIError异常。但在 Agent 流程里这三者处置方式天差地别400 是 prompt 写错了该立刻终止并告警429 是限流了该指数退避重试503 是服务端崩了该熔断切换备用模型超时是网络问题该缩短 timeout 并重试。如果全塞进一个异常类型你的重试逻辑要么过度把 400 当网络问题重试要么不足把 503 当临时抖动忽略最终导致整个 Agent 链路雪崩。第三调试信息严重失焦。SDK 日志默认只输出“Request sent”、“Response received”连真实的 request URL、headers、body 长度都不打。而 Agent 出问题90% 的根因在输入侧是不是 system prompt 里混入了不可见字符是不是 user message 的 JSON 格式被前端序列化错了是不是 tool call 的 arguments 字段名大小写不一致没有原始请求快照你只能靠猜。某次我们排查一个“模型总返回空字符串”的问题耗时 8 小时最后发现是前端传来的messages数组里有一条role: user的对象其content字段值是null而非—— 智谱 API 对nullcontent 的处理是静默丢弃整条消息且不报错。这种细节SDK 日志里根本看不到。2.2 Agent-Reach 的三层设计哲学CLI 为入口、Adapter 为中枢、Profile 为策略基于以上痛点Agent-Reach 的设计不是“再造一个 SDK”而是构建一个可插拔、可审计、可策略化的调用胶水层。它由三个核心部分组成彼此解耦各司其职CLI 层入口提供agent-reach call、agent-reach list-providers、agent-reach validate-prompt等命令。所有操作都可通过命令行完成无需写 Python 代码。好处是运维同学用curl就能触发测试CI/CD 流水线用 shell 脚本就能集成SRE 可以直接在 Grafana 里嵌入 CLI 执行结果做监控。CLI 不是玩具它背后是完整的 ArgumentParser 和 Subcommand 设计支持-v输出详细 debug 日志--dry-run预演请求而不真实发送--profile指定配置文件。Adapter 层中枢这是真正的“翻译官”。每个 LLM 提供商如zhipuai,minimax,deepseek-official对应一个独立 Adapter 类负责将统一的内部 Request 对象转换成该厂商要求的 HTTP 请求格式再将原始 Response解析成标准的{status, usage, choices, error}结构。关键点在于Adapter 只做协议转换不做业务逻辑。比如 DeepSeek Adapter 不会自动帮你加 system prompt也不会帮你做 token 计算——它只保证“你给它什么它就按 DeepSeek 规范发什么它收到什么就原样转成标准结构给你”。这样当厂商 API 升级时你只需更新对应 Adapter不影响上层业务。Profile 层策略这是 Agent-Reach 的灵魂。一个 Profile 是一个 YAML 文件定义了针对特定场景的调用策略。例如finance-risk.yaml会设置max_retries: 2风控不容重试太多timeout: 8.0比普通问答更严格context_window: 4096金融文本 token 密度高fallback_provider: minimax智谱超时时自动切 Minimax。Profile 可以继承base: default可以覆盖override: true甚至可以按环境加载prod.yaml/staging.yaml。它让“怎么调用 LLM”这件事从代码里抽离出来变成可配置、可版本化、可灰度发布的运维资产。这个三层结构确保了 Agent-Reach 的核心价值把“调用 LLM”这个动作从一个不可控的黑盒变成一个可观察、可配置、可治理的基础设施能力。它不阻止你用 LangChain反而让你能把 LangChain 的LLMChain或AgentExecutor的底层 LLM 实例替换成AgentReachLLM——后者只是把 LangChain 的invoke()调用转交给 Agent-Reach CLI 执行并捕获其标准化输出。3. 核心细节解析CLI 命令设计、Adapter 实现要点与 Profile 配置精要3.1 CLI 命令体系为什么只有 5 个命令却覆盖 95% 的日常需求Agent-Reach 的 CLI 不追求命令数量而追求每个命令的“信息密度”和“故障穿透力”。目前稳定版只提供 5 个核心命令全部经过线上高频使用验证agent-reach call主命令发起一次 LLM 调用。支持--provider zhipuai、--model glm-4-flash、--messages messages.json、--profile finance-risk等参数。关键设计是--messages参数它不接受字符串只接受 JSON 文件路径。文件内容必须是标准 OpenAI 格式[{ role: system, content: ... }, { role: user, content: ... }]。这样强制规范输入避免命令行里写 JSON 引发的引号逃逸问题。实测中80% 的线上事故源于前端传参格式错误而 JSON 文件天然规避了这个问题。agent-reach list-providers列出所有已注册的 Provider即 Adapter。输出表格包含Name、Status是否健康、Default Model、Max Context四列。Status 列会实时执行一次health_check请求如向智谱发一个空 messages 的请求并显示耗时。运维同学巡检时只需运行此命令一眼就能看出哪个 Provider 挂了或变慢了。agent-reach validate-prompt这是最常被低估的命令。它不发请求只做本地校验检查messages.json是否合法 JSON检查每条 message 的role是否为system/user/assistant/tool检查content是否为 string拒绝 null检查 total tokens 是否超过--provider指定的context_window用 tiktoken 精确计算。它能在请求发出前拦截 70% 的低级错误。我们把它集成到 Git pre-commit hook 里每次提交 prompt 相关文件自动校验。agent-reach show-profile显示指定 Profile 的完整内容并高亮当前生效的 override 参数。比如agent-reach show-profile --name finance-risk会输出 YAML但把timeout: 8.0这一行用标记因为它是覆盖了 base 的timeout: 30.0。这解决了“为什么这个请求超时时间是 8 秒而不是 30 秒”的困惑让配置变更可追溯。agent-reach run-benchmark专为压测设计。接受一个--concurrency 10和--duration 60持续发送请求并输出实时统计RPS、P95 延迟、错误率、各 Provider 的负载分布。它不依赖外部监控系统一个命令就能拿到核心 SLO 数据。某次我们发现智谱在并发 50 时错误率陡增就是靠这个命令定位到是他们的连接池配置不合理。提示所有 CLI 命令都支持--config-dir参数允许你指定配置文件目录默认是~/.agent-reach。这意味着你可以为不同项目维护独立的 config 目录避免全局污染。比如agent-reach --config-dir ./project-a-config call ...。3.2 Adapter 实现要点如何用 200 行代码写出一个健壮的 DeepSeek AdapterAdapter 是 Agent-Reach 的技术核心但实现并不复杂。以 DeepSeek 为例一个生产可用的 Adapter关键在于处理好三个“魔鬼细节”第一认证头Auth Header的动态注入。DeepSeek 要求Authorization: Bearer api_key但 API Key 绝不能硬编码。Agent-Reach 的约定是Key 从环境变量DEEPSEEK_API_KEY读取若不存在则尝试从~/.agent-reach/secrets.yaml读取该文件 gitignore由运维分发。Adapter 初始化时会检查 Key 是否存在不存在则抛出MissingAPIKeyErrorCLI 层捕获后友好提示“请设置 DEEPSEEK_API_KEY 环境变量”。这比 SDK 抛出模糊的AuthenticationError清晰得多。第二Request Body 的精准构造。DeepSeek 的/chat/completions接口要求messages数组、model字符串、temperature等字段但它不支持max_tokens会忽略而是用max_completion_tokens。很多 SDK 直接把max_tokens映射过去导致参数失效。Agent-Reach 的 DeepSeek Adapter 明确区分max_tokens是用户语义最大生成长度Adapter 内部将其映射为max_completion_tokens同时它会主动计算messages的 token 数用tiktoken.encoding_for_model(deepseek-chat)并确保max_completion_tokens不超过context_window - messages_token_count否则提前报错。这避免了“明明设了 max_tokens100结果模型生成了 500 字还被截断”的诡异现象。第三Response 解析的容错性。DeepSeek 的成功响应是{id:..., choices:[{message:{role:assistant,content:...},finish_reason:stop}], usage:{prompt_tokens:123,completion_tokens:45,total_tokens:168}}。但失败响应可能是{error:{code:invalid_api_key,message:Invalid API key.}}也可能是{error:context_length_exceeded}注意这里 error 是字符串不是对象。Adapter 的parse_response方法必须覆盖所有情况先检查response.status_code 200再检查response.json()是否有choices字段再检查是否有error字段无论 object 还是 string最后才提取usage。我们曾遇到一次 DeepSeek 服务端 bug返回200状态码但 body 是纯文本Internal Server ErrorAdapter 的try...except json.JSONDecodeError捕获后会将其包装成标准错误结构{error: {type: json_parse_error, message: Invalid JSON response}}确保上层逻辑能统一处理。注意Adapter 的单元测试必须覆盖这三种响应场景。我们用responses库 mock HTTP 请求为每个 Adapter 编写至少 15 个测试用例包括正常响应、401、429、503、JSON 解析失败、字段缺失等。测试覆盖率要求 100%这是 Adapter 稳定性的底线。3.3 Profile 配置精要一个 YAML 文件如何承载复杂的调用策略Profile 不是简单的参数集合而是一套策略声明。以finance-risk.yaml为例其核心配置如下# finance-risk.yaml base: default override: true provider: zhipuai model: glm-4-flash timeout: 8.0 max_retries: 2 retry_backoff_factor: 2.0 context_window: 4096 fallback_provider: minimax fallback_model: abab6.5s prompt_template: | 你是一名资深金融风控专家。请严格按以下步骤分析 1. 提取用户输入中的交易金额、商户名称、时间戳 2. 查询历史风险库判断该商户是否在黑名单 3. 若在黑名单返回REJECT否则返回APPROVE。 请只返回REJECT或APPROVE不要任何解释。这里的关键设计点base: default继承default.yaml的通用配置如log_level: INFO、cache_enabled: true。避免重复定义符合 DRY 原则。override: true明确声明这是一个覆盖型 Profile。Agent-Reach 加载时会合并 base 和当前 Profile冲突项以当前为准。这比“覆盖整个 dict”更安全因为新增字段不会意外丢失。timeout: 8.0这是硬性超时单位秒。Agent-Reach 的 HTTP Client 使用httpx.AsyncClient(timeouthttpx.Timeout(8.0))确保 DNS 解析、连接、读取全部受控。对比 SDK 的timeout30这里更激进因为风控决策必须快。retry_backoff_factor: 2.0重试退避因子。第一次重试等待1 * 2.0 2.0s第二次2.0 * 2.0 4.0s第三次4.0 * 2.0 8.0s。指数退避避免雪崩。Agent-Reach 还支持retry_jitter: true在退避时间上加随机抖动±10%进一步分散请求峰。prompt_template这是 Profile 的高级用法。它不是一个固定 prompt而是一个 Jinja2 模板。CLI 调用时可传入--template-vars {amount: 10000, merchant: XX珠宝}Agent-Reach 会渲染模板再将结果作为messages发送。这实现了“一套 Profile多种业务场景”的复用。Profile 的加载顺序是CLI 参数 当前目录agent-reach.yaml~/.agent-reach/profiles/下的文件 base。这种层级设计让开发、测试、生产环境能无缝切换无需改代码。4. 实操过程从零部署一个可运行的 Agent-Reach 环境含智谱、Minimax 双 Provider4.1 环境准备为什么推荐 Python 3.10 和 Poetry而非 pipAgent-Reach 的最小运行环境要求 Python 3.10原因有二一是httpx的异步特性在 3.10 更稳定二是tiktoken的某些 encoder 在旧版本 Python 有兼容性问题。我们不推荐用pip install agent-reach因为官方 PyPI 上并无agent-reach包它不是一个通用库而是项目级工具直接pip install会忽略pyproject.toml中的 dev-dependencies如pytest,responses导致你无法运行测试版本锁定不精确可能引入不兼容的httpx或tiktoken。正确做法是克隆 GitHub 仓库假设地址为https://github.com/your-org/agent-reach然后用 Poetry 管理依赖。Poetry 是 Python 的现代包管理器能精确锁定每个子依赖的版本避免“在我机器上好使在 CI 上崩了”的经典问题。# 1. 安装 Poetry官网推荐方式 curl -sSL https://install.python-poetry.org | python3 - # 2. 克隆仓库 git clone https://github.com/your-org/agent-reach.git cd agent-reach # 3. 创建虚拟环境并安装依赖含 dev 依赖 poetry install # 4. 激活虚拟环境 poetry shell # 5. 验证安装 agent-reach --helpPoetry 会根据pyproject.toml创建隔离的虚拟环境并安装httpx0.27.0,tiktoken0.7.0,pyyaml6.0.1等精确版本。poetry.lock文件确保团队内所有人用完全一致的依赖树。这是 Agent-Reach 稳定性的第一道防线。实操心得如果你的公司禁用 Poetry可用pipenv替代但绝不能用裸pip install -r requirements.txt。因为requirements.txt通常只锁主依赖子依赖版本浮动极易引发线上事故。我们曾因httpx从 0.26 升到 0.27导致重试逻辑失效花了 3 小时定位。4.2 配置 Provider如何安全地注入智谱和 Minimax 的 API KeyAgent-Reach 的 Key 管理遵循“环境变量优先文件备份”的原则。步骤如下第一步设置环境变量# Linux/macOS export ZHIPUAI_API_KEYyour_zhipu_key_here export MINIMAX_API_KEYyour_minimax_key_here export MINIMAX_GROUP_IDyour_group_id # Minimax 需要 group_id第二步创建 secrets.yaml可选用于备份或 CImkdir -p ~/.agent-reach cat ~/.agent-reach/secrets.yaml EOF zhipuai: api_key: your_zhipu_key_here minimax: api_key: your_minimax_key_here group_id: your_group_id EOF chmod 600 ~/.agent-reach/secrets.yaml # 严格权限防泄露第三步注册 ProviderAgent-Reach 默认只启用zhipuai和minimax但你需要显式注册它们的 Adapter。编辑~/.agent-reach/config.yamlproviders: zhipuai: adapter: agent_reach.adapters.zhipuai.ZhiPuAiAdapter enabled: true minimax: adapter: agent_reach.adapters.minimax.MinimaxAdapter enabled: true第四步验证连通性# 测试智谱 agent-reach list-providers # 输出应显示 zhipuai Status: OK (234ms) # 测试 Minimax agent-reach call --provider minimax --model abab6.5s --messages test.json # test.json 内容[{role:user,content:你好}]注意Minimax 的abab6.5s模型要求group_id必须在 headers 中Agent-Reach 的 Minimax Adapter 会自动从环境变量或 secrets.yaml 读取并注入。如果忘记设置MINIMAX_GROUP_IDCLI 会清晰报错“Minimax requires GROUP_ID environment variable”。4.3 编写第一个 Profile为客服场景定制一个高可用 Profile假设你的 Agent 是电商客服机器人需要高可用容忍单点故障和快速响应用户等待感强。创建profiles/customer-service.yamlbase: default override: true provider: zhipuai model: glm-4-flash timeout: 5.0 max_retries: 3 retry_backoff_factor: 1.5 context_window: 8192 fallback_provider: minimax fallback_model: abab6.5s prompt_template: | 你是一名 {{company_name}} 客服。请用中文回答语气亲切专业。 用户问题{{user_query}} 请先确认问题类型售前/售后/物流/其他再给出简洁解决方案。 如果问题超出能力请说“我将为您转接人工客服”。然后创建一个测试消息test-customer.json[ { role: system, content: 你是一名京东客服。请用中文回答语气亲切专业。 }, { role: user, content: 我的订单 123456789 一直没发货能查一下吗 } ]执行调用agent-reach call \ --profile customer-service \ --template-vars {company_name: 京东, user_query: 我的订单 123456789 一直没发货能查一下吗} \ --messages test-customer.jsonCLI 会加载customer-service.yaml合并default.yaml渲染prompt_template生成最终 messages计算 token 数约 42 个确认未超context_window向智谱发送请求若返回 429限流则等待1.5s后重试最多 3 次若智谱连续失败则自动切换到 Minimax用abab6.5s模型重试。整个过程你只用一条命令却获得了企业级的容错能力。5. 常见问题与排查技巧实录那些线上踩过的坑现在都成了标准流程5.1 “No API key for provider route deepseek-official” 错误的 3 种根因与解法这个错误信息直白但背后原因多样。我们整理了线上最常遇到的三种情况现象根因排查命令解决方案agent-reach list-providers显示deepseek-officialStatus: ERRORDEEPSEEK_API_KEY环境变量未设置且secrets.yaml中也无该 Keyecho $DEEPSEEK_API_KEY设置环境变量export DEEPSEEK_API_KEYxxx或在secrets.yaml中添加deepseek-official: {api_key: xxx}agent-reach call --provider deepseek-official ...失败但list-providers显示 OKProvider 已注册但config.yaml中providers.deepseek-official.enabled为falseagent-reach show-config | grep -A5 deepseek编辑~/.agent-reach/config.yaml将enabled: false改为trueagent-reach call成功但日志显示Using fallback_provider: zhipuaiDeepSeek API 返回400 Bad Request但错误信息是{error: invalid_api_key}Agent-Reach 将其识别为认证失败触发 fallbackagent-reach call --provider deepseek-official --messages test.json -v检查 Key 是否过期或是否复制了多余空格常见于从网页复制。用echo $DEEPSEEK_API_KEY | hexdump -C查看末尾是否有0a换行符实操心得我们把agent-reach list-providers加入每日早会自动化巡检脚本。一旦 Status 不是 OK立刻钉钉告警。这比等用户投诉“客服机器人不说话”要早 3 小时发现问题。5.2 “This models maximum context length is 1048576 tokens” 错误不是模型问题是你的 Prompt 太“胖”这个错误看似是模型限制实则是 Agent-Reach 的validate-prompt命令没被用起来。1048576 tokens 是 DeepSeek 的理论上限但实际中你的messages很难达到这个量级。真正的问题是你在messages里塞了一个 5MB 的日志文件或者前端传来了一个未压缩的 base64 图片字符串。排查流程运行agent-reach validate-prompt --provider deepseek-official --messages huge.json输出会显示Total tokens estimated: 1,245,678并标红警告Exceeds context_window (1048576) by 197,102 tokens运行jq .[] \| select(.roleuser) \| .content huge.json \| wc -c查看 content 字节数如果 1MB基本确定是前端传了大文件解决方案前端上传大文件时先调用agent-reach validate-prompt预检失败则提示用户“内容过长请精简”后端在 Agent 逻辑里对messages做预处理if len(content) 100000: content content[:100000] ...(truncated)并记录告警日志Agent-Reach升级validate-prompt增加--truncate-threshold 100000参数自动截断超长 content5.3 CLI 执行缓慢90% 的原因是 DNS 解析或代理配置Agent-Reach 的 CLI 本身很快启动 100ms但call命令慢通常是网络层问题。我们总结了三个高频原因DNS 解析慢国内访问智谱、Minimax 的域名有时 DNS 解析要 2-3 秒。解决方案在~/.agent-reach/config.yaml中配置dns_cache: trueAgent-Reach 会缓存 DNS 结果 300 秒。HTTP 代理干扰如果你设置了HTTP_PROXY环境变量而代理服务器不稳定会导致请求 hang 死。解决方案Agent-Reach 默认忽略系统代理如需使用显式加--proxy http://your-proxy:8080。SSL 证书验证失败某些企业内网拦截 HTTPS导致 SSL handshake 失败。解决方案CLI 支持--insecure参数仅测试环境或配置ca_bundle: /path/to/cert.pem。注意agent-reach run-benchmark是诊断网络问题的终极武器。它会并行发起 10 个请求如果 RPS 1且 P95 延迟 5s基本可断定是网络问题而非模型问题。5.4 Profile 继承失效YAML 缩进陷阱与 base 路径误区YAML 对缩进极其敏感。一个常见的错误是# 错误base 缩进不对会被解析为字符串而非 key base: default override: true # 这行缩进多了一格导致 override 不生效正确写法base: default override: true # 与 base 同级另一个误区是base的路径。Agent-Reach 默认在~/.agent-reach/profiles/下查找base文件。如果你的default.yaml在项目目录下CLI 会找不到。解决方案用绝对路径base: /path/to/your/default.yaml或把default.yaml放到标准位置。我们编写了一个agent-reach lint-profile命令未公开但可在源码中找到它会静态分析 YAML 语法、检查 base 文件是否存在、验证所有字段是否在 schema 内。建议在 CI 中加入此检查。6. 进阶应用如何将 Agent-Reach 集成到 LangChain、LlamaIndex 及 CI/CD 流水线6.1 与 LangChain 集成用 AgentReachLLM 替代原生 LLMLangChain 的LLM接口非常灵活。Agent-Reach 提供了AgentReachLLM类它实现了 LangChain 的LLM协议但底层调用 CLI。用法如下from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough from agent_reach.langchain import AgentReachLLM # 创建 AgentReachLLM 实例指定 profile llm AgentReachLLM( profile_namecustomer-service, # 可选覆盖 profile 中的参数 timeout3.0, max_retries1 ) # 构建 chain与原生 LangChain 完全一致 prompt ChatPromptTemplate.from_template(你是一个客服回答{question}) chain ( {question: RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 调用 result chain.invoke(我的订单还没发货) print(result)AgentReachLLM的关键优势是它把 LangChain 的invoke()调用转为subprocess.run([agent-reach, call, ...])并捕获 stdout 的 JSON 输出。这意味着LangChain 的所有日志、错误、重试都由 Agent-Reach 统一管理。你不需要改 LangChain 的任何代码只需替换 LLM 实例就能获得 Agent-Reach 的全部稳定性能力。6.2 与 LlamaIndex 集成在 QueryEngine 中注入可控 LLMLlamaIndex 的Settings.llm是全局设置。Agent-Reach 提供了AgentReachLLM的 LlamaIndex 适配器from llama_index.core import Settings from agent_reach.llamaindex import AgentReachLLM as AR_LLAMA_LLM Settings.llm AR_LLAMA_LLM( profile_nameknowledge-base, # 自动从 profile 读取 context_window用于 chunking 策略 ) # 后续所有 QueryEngine 的查询都走 Agent-Reach query_engine index.as_query_engine() response query_engine.query(什么是 GDPR)这里Agent-Reach 的context_window配置会被 LlamaIndex 用来优化NodePostprocessor的 chunk 大小确保检索到的 context 不会因超长而被截断。这是 SDK

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

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

免费获取报价 →
↑