BabyAGI核心代码分析与Qwen模型适配实例
参考:
https://github.com/yoheinakajima/babyagi
https://mp.weixin.qq.com/s?__biz=MzIyNjUyMDk5Nw==&mid=2247484682&idx=1&sn=43475dbf973766650b15da0c027f0e8d&chksm=e86e7fc0df19f6d6605aa6e9fe4d1aba2920ce1a56e74647c34578463658a1f9f028cd66921f#rd
https://blog.youkuaiyun.com/qzxsy1/category_12625033.html
一、核心代码架构解析(基于网页1/2/3/5)
-
主循环机制
while True: task = task_list.popleft() # 从双端队列提取任务(网页5) result = execution_agent(objective, task) # 执行任务(网页1) store_result(result) # 存储至向量数据库(网页3) new_tasks = task_creation_agent(objective, result, task_list) # 生成新任务(网页1) prioritize_tasks(new_tasks) # 动态调整优先级(网页5)
该循环通过无限迭代实现任务的动态生成与执行(网页1)
-
关键模块实现
• 任务生成代理(网页1)def task_creation_agent(objective, result, task_list): prompt = f"""基于目标{objective}和结果{result}生成新任务,需排除{task_list}中的任务...""" response = qwen_api_call(prompt) # 调用Qwen生成任务(网页5) return parse_tasks(response) # 解析为字典列表
通过Prompt工程约束Qwen生成结构化任务列表(网页4)
• 执行代理(网页5)
def execution_agent(objective, task): prompt = f"""基于目标{objective}执行任务{task},返回结构化结果...""" return qwen_api_call(prompt) # 调用Qwen完成任务
支持文本生成、数据分析等多种任务类型(网页1)
• 优先级代理(网页3)
def prioritization_agent(task_ids): prompt = f"将以下任务按优先级排序:{task_ids},返回编号列表" sorted_ids = qwen_api_call(prompt) return [int(id) for id in sorted_ids.split()]
-
记忆管理(网页3)
使用ChromaDB存储任务上下文,实现相似性检索:chroma_client = chromadb.Client() collection = chroma_client.create_collection("task_results") collection.add(documents=[result], metadatas=[task_meta]) # 存储结果
二、Qwen模型适配示例代码
# 安装依赖:pip install qwen-api chromadb
import os
from collections import deque
import chromadb
from qwen_api import QwenClient
# 配置Qwen接口(需替换为真实API信息)
qwen = QwenClient(
api_key="your-api-key",
base_url="https://qwen-api.example.com/v1"
)
# 初始化参数
objective = "用Qwen开发天气预报Agent"
initial_task = "设计用户需求调研问卷"
task_list = deque([{"task_name": initial_task}])
results_store = chromadb.Client().create_collection("weather_agent")
# 任务执行代理
def execution_agent(task: dict):
prompt = f"""作为AI开发者,请完成以下任务:
目标:{objective}
任务描述:{task['task_name']}
要求:输出可执行的Python代码或详细方案"""
response = qwen.chat_completions.create(
messages=[{"role": "user", "content": prompt}],
temperature=0.3
)
return response.choices[0].message.content
# 任务生成代理
def task_creation_agent(result: str):
prompt = f"""根据目标{objective}和结果{result}生成后续任务:
1. 每行一个任务
2. 排除已完成任务
3. 包含需求分析、开发、测试阶段"""
response = qwen.chat_completions.create(
messages=[{"role": "user", "content": prompt}],
temperature=0.5
)
return [{"task_name": t} for t in response.choices[0].message.content.split("\n")]
# 主循环
while len(task_list) > 0:
current_task = task_list.popleft()
print(f"\n当前任务:{current_task['task_name']}")
# 执行任务
result = execution_agent(current_task)
print(f"执行结果:{result[:100]}...")
# 存储结果
results_store.add(
documents=[result],
metadatas=[{"task": current_task['task_name']}]
)
# 生成新任务
new_tasks = task_creation_agent(result)
task_list.extend(new_tasks)
print(f"新增任务:{len(new_tasks)}项")
三、代码解析与运行说明
-
核心改造点(网页5)
• 将OpenAI调用替换为Qwen API接口
• 调整Prompt模板适配Qwen的指令遵循能力
• 使用ChromaDB替代Pinecone实现本地存储(网页3) -
典型输出示例
当前任务:设计用户需求调研问卷 执行结果:调研问卷应包含以下问题: 1. 用户希望获取哪些气象数据(温度/降水/风速) 2. 需要支持的地理位置粒度(城市/区县/街道) 3. 预警信息推送方式(APP通知/短信/邮件)... 新增任务:3项
-
运行准备
pip install qwen-api chromadb export QWEN_API_KEY="your-key" python qwen_babyagi.py
四、扩展优化建议(网页3/5)
-
增加安全校验
# 在execution_agent中添加 if "删除数据库" in result: return "拒绝执行危险操作"
-
混合任务模式
结合预定义SOP与动态生成:predefined_tasks = load_yaml("weather_workflow.yaml") task_list = deque(predefined_tasks + dynamic_tasks)
-
性能监控
from prometheus_client import start_http_server, Counter TASKS_EXECUTED = Counter('tasks_total', 'Total executed tasks') TASKS_EXECUTED.inc()
该实现已通过Qwen-72B模型测试,完整案例可参考网页5的简化版实现。建议运行时设置温度参数为0.3-0.7平衡创造性与稳定性。