BabyAGI核心代码分析与Qwen模型适配实例

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)
  1. 主循环机制

    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)

  2. 关键模块实现
    任务生成代理(网页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. 记忆管理(网页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)}项")

三、代码解析与运行说明
  1. 核心改造点(网页5)
    • 将OpenAI调用替换为Qwen API接口
    • 调整Prompt模板适配Qwen的指令遵循能力
    • 使用ChromaDB替代Pinecone实现本地存储(网页3)

  2. 典型输出示例

    当前任务:设计用户需求调研问卷
    执行结果:调研问卷应包含以下问题:
    1. 用户希望获取哪些气象数据(温度/降水/风速)
    2. 需要支持的地理位置粒度(城市/区县/街道)
    3. 预警信息推送方式(APP通知/短信/邮件)...
    新增任务:3项
    
  3. 运行准备

    pip install qwen-api chromadb
    export QWEN_API_KEY="your-key"
    python qwen_babyagi.py
    

四、扩展优化建议(网页3/5)
  1. 增加安全校验

    # 在execution_agent中添加
    if "删除数据库" in result:
        return "拒绝执行危险操作"
    
  2. 混合任务模式
    结合预定义SOP与动态生成:

    predefined_tasks = load_yaml("weather_workflow.yaml")
    task_list = deque(predefined_tasks + dynamic_tasks)
    
  3. 性能监控

    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平衡创造性与稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值