用 100 行代码实现一个混合智能体——让多个模型协作回答问题
Hermes MoA 证明了混合智能体的效果可以超过单个顶级模型。这篇文章教你实现一个简化版的混合智能体——让 DeepSeek 做分析、豆包做编码、GPT 做总结,模型之间协作完成任务。
核心思路
用户问题
↓
路由器 Agent(分析问题类型)
↓
┌────────┬────────┬────────┐
│ 分析师 │ 编码师 │ 总结师 │ ← 不同模型负责不同任务
│DeepSeek│ 豆包 │ DeepSeek│
└────────┴────────┴────────┘
↓
合成 Agent(整合结果)
↓
最终回答
核心代码
# moa_agent.py
from openai import OpenAI
import os, json
from dotenv import load_dotenv
load_dotenv()
clients = {
"deepseek": OpenAI(api_key=os.getenv("DEEPSEEK_KEY"), base_url="https://api.deepseek.com/v1"),
"doubao": OpenAI(api_key=os.getenv("DOUBAO_KEY"), base_url="https://ark.cn-beijing.volces.com/api/v3"),
}
MODEL_MAP = {"deepseek": "deepseek-chat", "doubao": "doubao-2.1-pro"}
def call_llm(provider, system_prompt, user_prompt, temperature=0.3):
client = clients[provider]
resp = client.chat.completions.create(
model=MODEL_MAP[provider],
messages=[{"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}],
temperature=temperature,
)
return resp.choices[0].message.content
class MoAgent:
"""混合智能体:分析问题 → 分派任务 → 多模型协作 → 整合结果。"""
def answer(self, question):
# 1. 路由器:分析问题类型并分派
plan = self._route(question)
# 2. 并行调用各专家模型
results = {}
for expert in plan["experts"]:
role = expert["role"]
prompt = expert["prompt"]
provider = expert.get("provider", "deepseek")
results[role] = call_llm(provider, prompt, question)
# 3. 合成最终答案
return self._synthesize(question, results)
def _route(self, question):
route_prompt = f"""分析以下问题,确定需要哪些专家角色。
返回 JSON:
{{"experts":[{{"role":"角色名","prompt":"系统提示","provider":"deepseek或doubao"}}]}}
分析以下问题:{question}"""
result = call_llm("deepseek", "", route_prompt)
try:
return json.loads(result)
except:
return {"experts": [{"role": "通用助手", "prompt": "回答以下问题", "provider": "deepseek"}]}
def _synthesize(self, question, results):
findings = "\n\n".join(f"### {role}\n{content}" for role, content in results.items())
return call_llm("deepseek",
"你是一个综合分析师。整合多位专家的观点,给出一个完整、准确的最终答案。",
f"问题:{question}\n\n专家意见:\n{findings}"
)
agent = MoAgent()
# 使用
answer = agent.answer("Python 中如何处理大文件读取而不导致内存溢出?")
print(answer)
运行效果
问题:Python 中如何处理大文件读取而不导致内存溢出?
🤖 路由器分析:
- 分析师(DeepSeek):分析问题,提供理论方案
- 编码师(豆包):提供代码实现
📊 分析师(DeepSeek):
大文件读取的核心策略是流式处理,主要有三种方式:
1. 逐行读取(readline)
2. 分块读取(read(chunk_size))
3. 内存映射(mmap)
💻 编码师(豆包):
```python
# 首选方案:分块读取
with open("large.csv", "r") as f:
while chunk := f.read(8192):
process(chunk)
```
🎯 综合答案:
对于大文件读取,推荐使用流式分块读取,每次读取 8KB...
总结
混合智能体不需要复杂的框架,核心就三步:
1. 分析问题,确定需要哪些专家角色
2. 并行调用不同的模型(各司其职)
3. 一个模型整合所有人的输出
100 行代码实现,效果可以超过单独使用任何一个模型。
本文由 Zyentor(智元界)原创发布