)
MiniMax M2.1 兼容 Anthropic API 接入实战用 Anthropic SDK 调用 M2 系列模型参数对照、流式输出与 Interleaved Thinking【免费下载链接】Agent-Skills-for-Context-EngineeringA comprehensive collection of Agent Skills for context engineering, multi-agent architectures, and production agent systems. Use when building, optimizing, or debugging agent systems that require effective context management.项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-Skills-for-Context-Engineering本指南以 docs/m2-1.md 为主体系统讲解如何通过 Anthropic SDK 调用 MiniMax M2 系列模型M2.1 / M2.1-lightning / M2从环境变量配置、请求参数兼容矩阵、流式响应解析到 Tool Use 与 Interleaved Thinking 的多轮调用最佳实践。仓库中的 Reasoning Trace Optimizer 正是基于这套兼容接口构建阅读本文后你将掌握在任意 Anthropic 生态项目中接入 M2 系列模型并正确维护其思考链上下文的完整方案。M2 系列与 Anthropic API 兼容能力概览MiniMax 为满足开发者对 Anthropic API 生态的接入需求为其文本生成服务提供了 Anthropic API 格式的兼容接口只需要简单配置即可把 MiniMax 模型能力接入 Anthropic SDK 生态而无需更换客户端代码。通过ANTHROPIC_BASE_URL指向 MiniMax 端点、ANTHROPIC_API_KEY填入 MiniMax 密钥即可工作。该兼容接口在本仓库中承担着实际生产角色examples/interleaved-thinking下的 Reasoning Trace Optimizer 项目就是通过 Anthropic SDKanthropic.Anthropic(api_key..., base_urlhttps://api.minimax.io/anthropic)驱动MiniMax-M2.1采集其思考块thinking block来调试与优化 Agent。相关封装见 capture.py。快速开始三步完成首次调用1. 安装 Anthropic SDK按语言选择安装方式# Python pip install anthropic# Node.js npm install anthropic-ai/sdk2. 配置环境变量端点按用户所在地区分国际用户使用https://api.minimax.io/anthropic中国大陆用户使用https://api.minimaxi.com/anthropic。export ANTHROPIC_BASE_URLhttps://api.minimax.io/anthropic export ANTHROPIC_API_KEY${YOUR_API_KEY}仓库 README.md 的 Quick Start 亦采用完全相同的环境变量约定并支持写入.env文件ANTHROPIC_API_KEY/ANTHROPIC_BASE_URL由项目自动加载见 examples/02_tool_usage.py。3. 发起首次调用并解析 thinking / text 内容块import anthropic client anthropic.Anthropic() message client.messages.create( modelMiniMax-M2.1, max_tokens1000, systemYou are a helpful assistant., messages[ { role: user, content: [ { type: text, text: Hi, how are you? } ] } ] ) for block in message.content: if block.type thinking: print(fThinking:\n{block.thinking}\n) elif block.type text: print(fText:\n{block.text}\n)与普通 Anthropic 调用相比关键差异在于M2.1 是 Agentic 推理模型其content列表中会出现type thinking的思考内容块需要与text块分别处理。4. 关键注意多轮对话必须回传完整响应在多轮 function call 对话中必须把模型完整响应assistant message追加到会话历史以维持推理链的连续性将完整的response.content列表追加到消息历史包含所有内容块thinking / text / tool_use。这一点在仓库源码中有严格实现——capture.py 在每轮工具交互后执行messages.append({role: assistant, content: response.content})并在注释中标注CRITICAL for M2.1。支持的模型与选型使用 Anthropic SDK 时兼容接口支持以下模型模型名说明MiniMax-M2.1强大的多语言编程能力综合增强的编程体验输出速度约 60 tpsMiniMax-M2.1-lightning更快更敏捷输出速度约 100 tpsMiniMax-M2Agentic 能力、高级推理兼容接口目前仅支持MiniMax-M2.1、MiniMax-M2.1-lightning、MiniMax-M2这三个模型其他模型请使用标准 MiniMax API 接口。需要留意的是原文档末尾的 Warning 中只列举了MiniMax-M2.1与MiniMax-M2未包含 lightning而 Supported Models 章节与参数表均含 lightning建议以正文 Supported Models 章节为准使用 lightning 前以官方最新公告为准。仓库 CLI 的模型枚举同时包含三个模型见 cli.py。请求参数兼容性全表使用 Anthropic SDK 时兼容接口对输入参数的支持情况如下参数支持状态说明model完全支持支持MiniMax-M2.1、MiniMax-M2.1-lightning、MiniMax-M2messages部分支持支持文本与工具调用暂不支持图像/文档输入max_tokens完全支持生成的最大 token 数stream完全支持流式响应system完全支持系统提示词temperature完全支持取值范围 (0.0, 1.0]控制输出随机性建议值 1tool_choice完全支持工具选择策略tools完全支持工具定义top_p完全支持核采样参数metadata完全支持元数据thinking完全支持推理内容top_k忽略该参数将被忽略stop_sequences忽略该参数将被忽略service_tier忽略该参数将被忽略mcp_servers忽略该参数将被忽略context_management忽略该参数将被忽略container忽略该参数将被忽略消息字段Content Block支持情况字段类型支持状态说明typetext完全支持文本消息typetool_use完全支持工具调用typetool_result完全支持工具调用结果typethinking完全支持推理内容typeimage不支持暂不支持图像输入typedocument不支持暂不支持文档输入参数使用建议源码视角temperature取值范围为 (0.0, 1.0]超出该范围会返回错误建议值为 1。tools/tool_choice完全支持工具定义与选择策略这是 Tool Use 工作流的基础。thinking返回推理内容是 Interleaved Thinking 的载体thinking块在响应中带有signature字段用于推理签名校验仓库 models.py 中的ThinkingBlock.signature即对应此字段。流式响应实战流式输出时通过事件流实时区分thinking与text内容块import anthropic client anthropic.Anthropic() print(Starting stream response...\n) print( * 60) print(Thinking Process:) print( * 60) stream client.messages.create( modelMiniMax-M2.1, max_tokens1000, systemYou are a helpful assistant., messages[ {role: user, content: [{type: text, text: Hi, how are you?}]} ], streamTrue, ) reasoning_buffer text_buffer for chunk in stream: if chunk.type content_block_start: if hasattr(chunk, content_block) and chunk.content_block: if chunk.content_block.type text: print(\n * 60) print(Response Content:) print( * 60) elif chunk.type content_block_delta: if hasattr(chunk, delta) and chunk.delta: if chunk.delta.type thinking_delta: # 流式输出思考过程 new_thinking chunk.delta.thinking if new_thinking: print(new_thinking, end, flushTrue) reasoning_buffer new_thinking elif chunk.delta.type text_delta: # 流式输出文本内容 new_text chunk.delta.text if new_text: print(new_text, end, flushTrue) text_buffer new_text print(\n)流式事件中需要处理的关键类型content_block_start内容块开始可据此判断后续是 text 还是 thinking 块content_block_delta增量内容其中thinking_delta携带思考增量、text_delta携带文本增量流结束后用stream.get_final_message()取回包含tool_use块的完整消息用于多轮回传。仓库 capture.py 的run_streaming()完整实现了上述事件解析并通过on_thinking/on_text/on_tool_call回调实时回吐内容其注释建议多轮工具交互场景优先使用非流式run()以保障 trace 采集可靠性。Tool Use 与 Interleaved ThinkingM2.1 是一个具备卓越 Tool Use 能力的 Agentic 模型原生支持Interleaved Thinking在每一轮工具交互之间进行推理。每次 Tool Use 之前模型都会基于当前环境与工具输出进行反思决定下一步动作。这一能力使其在长周期、复杂任务如 SWE、BrowseCamp、xBench 等同时考验编码与 Agentic 推理的基准上表现突出据 MiniMax 官方文档描述见 docs/interleavedthinking.md。与普通推理模型只在开头思考一次不同M2 系列的工作模式是传统模型: Think → Act → Act → Act → Done ↑ 仅在开始时推理 M2.1: Think → Act → Think → Act → Think → Act → Done ↑ ↑ ↑ 每次工具调用之间持续推理Interleaved Thinking 对 Agent 的意义长任务需要跨轮保持专注工具输出会引入不可预期的外部扰动、需要实时适应调试时需要看到决策如何做出而非仅看输出。thinking块Anthropic SDK或reasoning_details字段OpenAI SDK将这些推理过程暴露出来供分析。Anthropic SDK 完整示例多轮工具调用核心原则每次都要回传模型的完整响应——尤其是内部推理字段thinking。以下为 docs/interleavedthinking.md 的天气查询完整示例import anthropic import json # 初始化客户端 client anthropic.Anthropic() # 定义工具天气查询 tools [ { name: get_weather, description: Get weather of a location, the user should supply a location first., input_schema: { type: object, properties: { location: { type: string, description: The city and state, e.g. San Francisco, US, } }, required: [location] } } ] def send_messages(messages): params { model: MiniMax-M2.1, max_tokens: 4096, messages: messages, tools: tools, } response client.messages.create(**params) return response def process_response(response): thinking_blocks [] text_blocks [] tool_use_blocks [] # 遍历所有内容块 for block in response.content: if block.type thinking: thinking_blocks.append(block) print(f Thinking\n{block.thinking}\n) elif block.type text: text_blocks.append(block) print(f Model\t{block.text}) elif block.type tool_use: tool_use_blocks.append(block) print(f Tool\t{block.name}({json.dumps(block.input, ensure_asciiFalse)})) return thinking_blocks, text_blocks, tool_use_blocks # 1. 用户查询 messages [{role: user, content: Hows the weather in San Francisco?}] print(f\n User\t {messages[0][content]}) # 2. 模型返回首轮响应可能包含工具调用 response send_messages(messages) thinking_blocks, text_blocks, tool_use_blocks process_response(response) # 3. 若存在工具调用执行工具并继续对话 if tool_use_blocks: # ⚠️ 关键将 assistant 完整响应追加到消息历史 # response.content 是包含 [thinking 块, text 块, tool_use 块] 的列表 # 必须完整保留否则后续对话将丢失上下文 messages.append({ role: assistant, content: response.content }) # 执行工具并返回结果模拟天气 API 调用 print(f\n Executing tool: {tool_use_blocks[0].name}) tool_result 24℃, sunny print(f Tool result: {tool_result}) # 添加工具执行结果 messages.append({ role: user, content: [ { type: tool_result, tool_use_id: tool_use_blocks[0].id, content: tool_result } ] }) # 4. 获取最终响应 final_response send_messages(messages) process_response(final_response)真实运行输出节选展示了思考 → 工具调用 → 拿到结果后再思考 → 最终作答的完整链路 User Hows the weather in San Francisco? Thinking Okay, so the user is asking about the weather in San Francisco... Looking at my available tools, I see I have a get_weather function... So Ill make a tool call to get_weather with the location parameter set to San Francisco. ... Tool get_weather({location: San Francisco}) Executing tool: get_weather Tool result: 24℃, sunny Thinking Ive just called the get_weather tool to check the current conditions in San Francisco... Now I need to formulate a clear, concise response to the user... Model The current weather in San Francisco is 24℃ and sunny.响应体结构Anthropic 兼容接口返回的消息体包含thinking带signature、tool_use含id/name/input、usage与stop_reason等字段此处为简化示意{ id: 05566b15ee32962663694a2772193ac7, type: message, role: assistant, model: MiniMax-M2.1, content: [ { thinking: Let me think about this request. ..., signature: cfa12f9d651953943c7a33278051b61f586e2eae016258ad6b824836778406bd, type: thinking }, { type: tool_use, id: call_function_3679004591_1, name: get_weather, input: { location: San Francisco, US } } ], usage: { input_tokens: 222, output_tokens: 321 }, stop_reason: tool_use, base_resp: { status_code: 0, status_msg: } }其中stop_reason: tool_use表示模型要求调用工具此时必须继续执行工具并把结果以tool_result块回传thinking块的signature建议完整保留在历史中。仓库 models.py 的ThinkingBlock明确记录了content、turn_index、signature以及思考发生时的前后文preceding_tool_call/preceding_tool_result/following_action与上述响应结构一一对应。OpenAI SDK 兼容格式的对照补充使用 OpenAI SDK 调用 M2.1 时端点https://api.minimax.io/v1或https://api.minimaxi.com/v1可传额外参数reasoning_splitTrue把思考内容拆分到独立的reasoning_details字段若使用原生格式reasoning_splitFalse思考内容会以thinkreasoning_content/think形式注入content字段需手动解析。无论哪种格式整个response_message包括reasoning_details或think标签都必须完整保留并回传否则 Interleaved Thinking 的思维链会被打断。详见 docs/interleavedthinking.md。仓库中的落地实现Reasoning Trace Optimizer 如何依赖这套接口examples/interleaved-thinking是这套兼容接口的完整生产级用例其抓取 → 分析 → 优化 → 再运行闭环全部建立在 Anthropic 兼容接口之上TraceCapture采集capture.py 封装anthropic.Anthropic默认base_urlhttps://api.minimax.io/anthropic、modelMiniMax-M2.1每轮调用后把response.content原样追加进消息历史保证 Interleaved Thinking 上下文不丢并分离出 thinking / text / tool_use 三类块存入ReasoningTrace。TraceAnalyzer分析analyzer.py 用 M2.1 自身的推理能力分析采集到的思考块识别context_degradation、tool_confusion、instruction_drift、hallucination、goal_abandonment、circular_reasoning、premature_conclusion、missing_validation等失败模式并输出 0–100 分评估JSON 解析失败时回退为正则提取或中性分 50。PromptOptimizer / OptimizationLoop优化optimizer.py 基于分析结果生成改进提示词loop.py 串联执行 Agent → 采集轨迹 → 分析模式 → 优化提示词 → 重跑循环支持收敛阈值、回归检测与最佳提示词保留。SkillGenerator沉淀skill_generator.py 把优化结论生成为可分享的 Agent SkillSKILL.md 及 references 目录并记录optimization_summary.json、optimized_prompt.txt、patterns_found.json。CLIcli.py 提供rto capture/rto analyze/rto optimize/rto generate-skill四个子命令全部复用同一套 Anthropic 兼容客户端。仓库内 10 轮真实迭代的测试记录见 README.md显示得分在迭代间存在 ±15 分的随机波动、最佳分可能出现在运行中途而非末尾因此use_best_promptTrue会保留得分最高一轮的提示词第 6 轮 JSON 解析失败时通过回退逻辑返回中性分而非 0 分——这些数据也说明基于该兼容接口构建多轮 Agent 应用时健壮的解析与历史保全是工程重点。注意事项与最佳实践综合原文档的 Warning 与仓库经验模型范围兼容接口目前仅支持MiniMax-M2.1、MiniMax-M2.1-lightning、MiniMax-M2其他模型请改用标准 MiniMax API 接口。temperature取值范围为 (0.0, 1.0]超出范围将返回错误建议值为 1。部分 Anthropic 参数会被忽略如thinking、top_k、stop_sequences、service_tier、mcp_servers、context_management、container注意thinking虽列于忽略项但推理内容以thinking内容块形式正常返回。暂不支持 image / document 类型输入messages仅支持文本与工具调用。上下文即记忆据 docs/agentthinking.md 中的官方提示M2 依赖 Interleaved Thinking其上下文就是记忆必须保留完整会话历史含思考步骤。社区反馈中大量性能差距来自无意中丢弃这部分关键上下文——这在简单推理模型中很常见但对 M2 系列是致命的。工具定义要清晰为tools提供无歧义的名称、描述与参数 schema可显著降低tool_confusion类失败。关注 token 消耗每轮优化迭代都会消耗可观的 token多轮 Agent 循环capture analyze optimize需做好用量监控。延伸阅读本指南主文档examples/interleaved-thinking/docs/m2-1.mdM2.1 Tool Use 与 Interleaved Thinking 完整指南含 OpenAI SDK 对照examples/interleaved-thinking/docs/interleavedthinking.md为什么 Agent 需要 Interleaved Thinking对齐与泛化研究examples/interleaved-thinking/docs/agentthinking.mdReasoning Trace Optimizer 项目说明安装、配置、API 参考examples/interleaved-thinking/README.mdClaude Code 集成技能自动触发 / 按需分析examples/interleaved-thinking/SKILL.md可运行示例基本轨迹采集 examples/01_basic_capture.py、工具调用与思考演化 examples/02_tool_usage.py、完整优化循环 examples/03_full_optimization.py【免费下载链接】Agent-Skills-for-Context-EngineeringA comprehensive collection of Agent Skills for context engineering, multi-agent architectures, and production agent systems. Use when building, optimizing, or debugging agent systems that require effective context management.项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-Skills-for-Context-Engineering创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考