LangChaingo 实战在 Go 中组合使用 Claude 3.7 扩展思考与 128K 扩展输出【免费下载链接】langchaingoLangChain for Go, the easiest way to write LLM-based programs in Go项目地址: https://gitcode.com/GitHub_Trending/la/langchaingo本指南围绕仓库中的 anthropic-extended-capabilities 示例讲解如何在 LangChaingoLangChain for Go中同时启用 Claude 3.7 的Extended Thinking扩展思考与Extended Output扩展输出两大能力前者让模型以可配置的思考预算进行深度推理后者将单次输出上限从标准 8K 提升至 128K tokens。读完本文你将掌握完整的调用配置、Token 指标解读方式以及这两个能力在 llms/anthropic 包中的底层实现原理可直接复刻到自己的 Go 项目中。能力背景Claude 3.7 的两项扩展特性示例文档明确给出了这两项能力的定位Extended Thinking扩展思考为复杂推理任务启用深度思考模式通过thinking参数为模型分配独立的思考 token 预算模型先推理、再作答适合 CAP 定理、共识算法这类需要严密论证的主题。Extended Output扩展输出把单次生成的输出上限从标准的 8K tokens 提升到最高128K tokens让模型能够一次性产出超长文档如完整技术指南、长篇幅报告而无需分多次拼接。本示例的核心价值在于把两者组合使用用扩展思考保证复杂内容的推理质量用扩展输出保证最终成文的长度与完整性二者协同而非互斥。快速运行三步跑通示例示例位于 examples/anthropic-extended-capabilities依赖github.com/tmc/langchaingo v0.1.14-pre.4见 go.mod。运行方式与文档一致# 1. 设置 API Key export ANTHROPIC_API_KEYyour-api-key # 2. 进入示例目录并运行 go run .若未设置ANTHROPIC_API_KEY程序会友好提示并退出不会浪费请求见 main.go。运行期间模型需要同时进行深度推理和超长生成耗时明显长于普通请求控制台会打印Processing (this may take a while)...作为进度提示。示例会要求模型撰写一份面向资深工程师的分布式系统综合技术指南覆盖 8 个主题理论基础CAP 定理、共识算法、实践实现模式、大厂真实案例、Go 代码示例、测试策略、常见陷阱、性能优化、可观测性最佳实践——这是典型的既需要深度推理、又需要超长输出的任务形态。核心配置一行看懂组合开关文档给出了最小化的配置骨架opts : []llms.CallOption{ // 扩展思考高深度推理模式 llms.WithThinkingMode(llms.ThinkingModeHigh), // 扩展输出启用最高 128K tokens 输出 anthropic.WithExtendedOutput(), // 高 token 上限配合扩展输出使用 llms.WithMaxTokens(50000), }main.go 中的完整配置在此基础上增加了一条关键约束——启用思考时 temperature 必须为 1.0opts : []llms.CallOption{ llms.WithThinkingMode(llms.ThinkingModeHigh), // 扩展思考HIGH 模式 anthropic.WithExtendedOutput(), // 扩展输出最高 128K llms.WithMaxTokens(50000), // 可上探至 128K llms.WithTemperature(1.0), // 启用思考时温度必须为 1 }初始化客户端时还需显式指定支持扩展能力的模型main.gollm, err : anthropic.New( anthropic.WithModel(claude-3-7-sonnet-20250219), )调用方式与普通请求无异把opts传给GenerateContent即可resp, err : llm.GenerateContent(ctx, messages, opts...)扩展思考五档模式与预算分配规则WithThinkingMode定义在 llms/reasoning.go它把模式写入调用元数据thinking_config由底层按模型能力转换。五档枚举值及其含义llms/reasoning.go模式值含义ThinkingModeNonenone关闭思考/推理ThinkingModeLowlow最小思考预算约为 max tokens 的 20%ThinkingModeMediummedium中等思考预算约为 max tokens 的 50%ThinkingModeHighhigh最大思考预算约为 max tokens 的 80%ThinkingModeAutoauto由模型自行决定思考量默认值预算的具体计算由 CalculateThinkingBudget 完成它按maxTokens的 20% / 50% / 80% 折算。以示例中的WithMaxTokens(50000)为例HIGH 模式约产生 40,000 tokens 的思考预算——这也解释了为何扩展输出与扩展思考是天然搭档没有 128K 输出上限思考占用的预算会严重挤压可见输出空间。除模式外ThinkingConfig 还提供了BudgetTokens显式预算、ReturnThinking是否返回思考内容、StreamThinking流式输出思考 token、InterleaveThinking工具调用间交错思考Claude 4 特性等字段以及对应的 WithThinkingBudget、WithReturnThinking 等选项供更精细的控制。扩展输出一个 beta 头开启 128K 上限WithExtendedOutput定义于 llms/anthropic/options.go其实现本质是向请求附加 Anthropic 的 beta 功能头opts.Metadata[anthropic:beta_headers] []string{output-128k-2025-02-19}它通过Metadata传递 beta header且与既有 header 兼容叠加若已有prompt-caching-2024-07-31来自WithPromptCaching或interleaved-thinking-2025-05-14来自WithInterleavedThinking等头会追加而非覆盖options.go。因此你可以同时启用 prompt caching 与扩展输出降低成本的同时拉长输出。值得注意扩展输出只是放开上限实际输出多长仍由WithMaxTokens决定。示例取 50,000注释明确标注Can go up to 128K文档建议值为 128K 以内。源码级原理请求如何被组装WithExtendedOutput与WithThinkingMode都只是把配置写进CallOptions真正生效在 anthropicllm.go 的extractThinkingOptionsL478-L533中组装逻辑可以归纳为三步模型能力校验只有supportsReasoningForModel判定为支持的模型Claude 3.7、Claude 4、Claude 5 系列见 L447-L476才会应用思考配置避免向旧模型发送无效参数。预算推导与钳制优先使用BudgetTokens显式预算未设置时按模式调用CalculateThinkingBudget折算随后将预算钳制在 Claude 的合法区间[1024, 128000]内L506-L513。序列化为请求体预算大于 0 时生成anthropicclient.ThinkingConfig{Type: enabled, BudgetTokens: ...}L524-L530随请求发送请求体中的thinking字段定义见 internal/anthropicclient/messages.go同时beta_headers一并携带。响应侧的处理同样值得关注Claude 的思考内容可能以thinking标签形式混在文本中extractThinkingFromText 会将其剥离分别提取思考内容与可见输出结构化响应中的 thinking 块则解析为ThinkingContent类型internal/anthropicclient/messages.go并在GenerationInfo中暴露ThinkingContent、ThinkingSignature等标准化字段anthropicllm.go。运行结果解读Token 指标与思考分析示例运行完成后会打印详细的 Token 指标main.go主要分三块基础用量从GenerationInfo的PromptTokens、CompletionTokens、TotalTokens字段读取。思考分析调用通用函数llms.ExtractThinkingTokens(genInfo)定义于 llms/reasoning.go同时兼容 OpenAI 风格ReasoningTokens与 Anthropic 风格ThinkingTokens字段返回ThinkingTokenUsagellms/reasoning.go再计算出思考 token 数ThinkingTokens可见输出 总输出 − 思考 token思考占比示例格式化为输出总量的百分比预算分配量ThinkingBudgetAllocated与实际使用量ThinkingBudgetUsed扩展输出判定当outputTokens 8192标准上限时打印✅ Extended Output Active直观确认 128K 扩展输出已生效。此外当响应字符数超过 10,000 时程序会询问是否将完整内容保存为distributed-systems-guide.mdmain.go方便把超长生成结果落盘复用。运行前提与注意事项模型版本需使用claude-3-7-sonnet-20250219或更新型号旧模型不支持扩展思考源码通过supportsReasoningForModel硬性校验。账号权限你的 Anthropic API Key 需具备 Claude 3.7 访问权且账号已开通扩展思考与扩展输出特性示例 README 的 Requirements 一节明确列出。温度约束启用思考时temperature必须设为 1.0这是 Anthropic 侧的行为约束示例代码已显式遵守。耗时预期思考 超长生成的组合会显著增加响应时间设计交互时需预留充足超时与用户体验兜底。成本意识思考预算最高可占 max tokens 的 80%HIGH 模式超长输出也会按量计费生产环境建议按任务难度选档LOW/MEDIUM/HIGH而非一律拉满。延伸阅读想继续深入可在仓库内查看llms/reasoning.go思考模式、预算计算与ExtractThinkingTokens的通用实现llms/anthropic/options.goWithExtendedOutput、WithInterleavedThinking、WithBetaHeader等 Anthropic 专属选项llms/anthropic/anthropicllm.go思考配置提取、模型能力判定与thinking文本解析llms/anthropic/internal/anthropicclient/messages.go请求体中thinking参数与响应中 thinking 块的序列化定义同族示例 anthropic-interleaved-thinking 与 anthropic-tool-call-example可对比思考能力在工具调用场景下的用法。【免费下载链接】langchaingoLangChain for Go, the easiest way to write LLM-based programs in Go项目地址: https://gitcode.com/GitHub_Trending/la/langchaingo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?