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 SDK(anthropic.Anthropic(api_key=..., base_url="https://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_URL=https://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( model="MiniMax-M2.1", max_tokens=1000, system="You 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(f"Thinking:\n{block.thinking}\n") elif block.type == "text": print(f"Text:\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 tps) |
| MiniMax-M2.1-lightning | 更快更敏捷(输出速度约 100 tps) |
| MiniMax-M2 | Agentic 能力、高级推理 |
兼容接口目前仅支持
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-M2 |
messages | 部分支持 | 支持文本与工具调用,暂不支持图像/文档输入 |
max_tokens | 完全支持 | 生成的最大 token 数 |
stream | 完全支持 | 流式响应 |
system | 完全支持 | 系统提示词 |
temperature | 完全支持 | 取值范围 (0.0, 1.0],控制输出随机性,建议值 1 |
tool_choice | 完全支持 | 工具选择策略 |
tools | 完全支持 | 工具定义 |
top_p | 完全支持 | 核采样参数 |
metadata | 完全支持 | 元数据 |
thinking | 完全支持 | 推理内容 |
top_k | 忽略 | 该参数将被忽略 |
stop_sequences | 忽略 | 该参数将被忽略 |
service_tier | 忽略 | 该参数将被忽略 |
mcp_servers | 忽略 | 该参数将被忽略 |
context_management | 忽略 | 该参数将被忽略 |
container | 忽略 | 该参数将被忽略 |
消息字段(Content Block)支持情况
| 字段类型 | 支持状态 | 说明 |
|---|---|---|
type="text" | 完全支持 | 文本消息 |
type="tool_use" | 完全支持 | 工具调用 |
type="tool_result" | 完全支持 | 工具调用结果 |
type="thinking" | 完全支持 | 推理内容 |
type="image" | 不支持 | 暂不支持图像输入 |
type="document" | 不支持 | 暂不支持文档输入 |
参数使用建议(源码视角)
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( model="MiniMax-M2.1", max_tokens=1000, system="You are a helpful assistant.", messages=[ {"role": "user", "content": [{"type": "text", "text": "Hi, how are you?"}]} ], stream=True, ) 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="", flush=True) reasoning_buffer += new_thinking elif chunk.delta.type == "text_delta": # 流式输出文本内容 new_text = chunk.delta.text if new_text: print(new_text, end="", flush=True) 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 Thinking
M2.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_ascii=False)})") return thinking_blocks, text_blocks, tool_use_blocks # 1. 用户查询 messages = [{"role": "user", "content": "How's 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> How's 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 I'll 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> I've 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_split=True,把思考内容拆分到独立的reasoning_details字段;若使用原生格式(reasoning_split=False),思考内容会以<think>reasoning_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_url="https://api.minimax.io/anthropic"、model="MiniMax-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 Skill(SKILL.md 及 references 目录),并记录
optimization_summary.json、optimized_prompt.txt、patterns_found.json。 - CLI:cli.py 提供
rto capture/rto analyze/rto optimize/rto generate-skill四个子命令,全部复用同一套 Anthropic 兼容客户端。
仓库内 10 轮真实迭代的测试记录(见 README.md)显示:得分在迭代间存在 ±15 分的随机波动、最佳分可能出现在运行中途而非末尾,因此use_best_prompt=True会保留得分最高一轮的提示词;第 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.md
- M2.1 Tool Use 与 Interleaved Thinking 完整指南(含 OpenAI SDK 对照):examples/interleaved-thinking/docs/interleavedthinking.md
- 为什么 Agent 需要 Interleaved Thinking(对齐与泛化研究):examples/interleaved-thinking/docs/agentthinking.md
- Reasoning Trace Optimizer 项目说明(安装、配置、API 参考):examples/interleaved-thinking/README.md
- Claude 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),仅供参考