最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

純Python代碼從零構(gòu)建一個AI多智能體系統(tǒng)

 更新時間:2026年04月08日 09:11:37   作者:平安的平安  
單個 AI 能做的事有限,三個 AI 分工協(xié)作能做的事遠(yuǎn)超你想象,本文介紹了如何使用Python實現(xiàn)一個多智能體系統(tǒng),文中還提供了系統(tǒng)架構(gòu)設(shè)計、代碼實現(xiàn)和執(zhí)行流程詳解,希望對大家有所幫助

單個 AI 能做的事有限,三個 AI 分工協(xié)作能做的事遠(yuǎn)超你想象。本文用純 Python 從零實現(xiàn)一個多智能體系統(tǒng),完整代碼可直接運行。

一、什么是多智能體系統(tǒng)(Multi-Agent System)?

簡單說:多個 AI Agent 各司其職,協(xié)作完成一個復(fù)雜任務(wù)。

類比現(xiàn)實團(tuán)隊:

  • 產(chǎn)品經(jīng)理負(fù)責(zé)分析需求
  • 程序員負(fù)責(zé)寫代碼
  • 測試工程師負(fù)責(zé)檢查質(zhì)量

每個 Agent 有自己的職責(zé)、工具和思考方式,它們之間通過消息傳遞來協(xié)作。

二、為什么不用現(xiàn)成框架?

LangGraph、CrewAI、AutoGen 都很好,但先理解原理再選框架,才是正確的學(xué)習(xí)路徑。

本文先用純 Python 實現(xiàn)核心邏輯,再對比框架選型。

三、系統(tǒng)架構(gòu)設(shè)計

我們要構(gòu)建的系統(tǒng):AI 研發(fā)小隊

用戶輸入需求 → 協(xié)調(diào)者拆分任務(wù) → 三位 Agent 各司其職 → 匯總交付

角色職責(zé)工具
Coordinator(協(xié)調(diào)者)分析需求、分配任務(wù)、匯總結(jié)果任務(wù)拆解、結(jié)果整合
Researcher(研究員)搜集技術(shù)方案、查找最佳實踐知識檢索、方案分析
Coder(程序員)編寫代碼實現(xiàn)代碼生成、文件操作
Reviewer(審查員)檢查代碼質(zhì)量和安全性代碼審查、漏洞掃描

四、代碼實現(xiàn)

4.1 基礎(chǔ)類:定義 Agent

# agent.py
import json
import ollama
from dataclasses import dataclass, field
from typing import Optional


@dataclass
class Message:
    role: str       # "user" | "agent" | "system"
    sender: str     # 發(fā)送者名稱
    content: str


@dataclass
class Agent:
    name: str
    role: str
    system_prompt: str
    model: str = "qwen3:8b"
    history: list = field(default_factory=list)

    def think(self, messages: list[Message]) -> str:
        """思考并回復(fù)"""
        # 構(gòu)建完整的消息列表
        full_messages = [
            {"role": "system", "content": self.system_prompt}
        ]
        for msg in messages:
            full_messages.append({
                "role": "user" if msg.sender != self.name else "assistant",
                "content": f"[來自 {msg.sender}] {msg.content}"
            })

        # 調(diào)用模型
        response = ollama.chat(
            model=self.model,
            messages=full_messages
        )
        return response["message"]["content"]

4.2 定義三個專業(yè) Agent

# agents.py
from agent import Agent

# 研究員 Agent:負(fù)責(zé)技術(shù)調(diào)研
researcher = Agent(
    name="Researcher",
    role="技術(shù)研究員",
    system_prompt="""你是一個技術(shù)研究員。你的任務(wù)是:
1. 分析用戶需求中涉及的技術(shù)點
2. 給出最佳實踐和技術(shù)方案建議
3. 列出關(guān)鍵注意事項和潛在風(fēng)險

輸出格式:
## 技術(shù)分析
(分析內(nèi)容)

## 推薦方案
(方案詳情)

## 注意事項
(風(fēng)險和注意點)"""
)

# 程序員 Agent:負(fù)責(zé)寫代碼
coder = Agent(
    name="Coder",
    role="高級程序員",
    system_prompt="""你是一個高級 Python 程序員。你的任務(wù)是:
1. 根據(jù)需求和調(diào)研結(jié)果編寫高質(zhì)量的 Python 代碼
2. 代碼必須包含完整的類型注解和 docstring
3. 包含錯誤處理和日志記錄
4. 輸出可直接運行的完整代碼

輸出格式:
## 實現(xiàn)思路
(簡述思路)

## 完整代碼
```python
(代碼)
```"""
)

# 審查員 Agent:負(fù)責(zé)代碼審查
reviewer = Agent(
    name="Reviewer",
    role="代碼審查專家",
    system_prompt="""你是一個嚴(yán)格的代碼審查專家。你的任務(wù)是:
1. 審查代碼的正確性、安全性和性能
2. 檢查是否遵循最佳實踐
3. 給出修改建議

評分標(biāo)準(zhǔn)(滿分 10 分):
- 正確性:代碼邏輯是否正確
- 安全性:是否存在安全漏洞
- 可讀性:命名、注釋、代碼結(jié)構(gòu)
- 性能:是否有明顯的性能問題

輸出格式:
## 評分:X/10
## 優(yōu)點
(列出優(yōu)點)
## 問題
(列出問題)
## 修改建議
(具體建議)"""
)

4.3 協(xié)調(diào)者:任務(wù)調(diào)度中心

# coordinator.py
from agent import Agent, Message


class Coordinator:
    """協(xié)調(diào)者:負(fù)責(zé)調(diào)度多個 Agent 協(xié)作"""

    def __init__(self, researcher, coder, reviewer):
        self.researcher = researcher
        self.coder = coder
        self.reviewer = reviewer
        self.log = []

    def _log(self, phase: str, content: str):
        """記錄執(zhí)行日志"""
        self.log.append({"phase": phase, "content": content})
        print(f"\n{'='*60}")
        print(f"?? [{phase}]")
        print(f"{'='*60}")
        print(content[:500] + "..." if len(content) > 500 else content)

    def run(self, task: str, max_revisions: int = 2) -> dict:
        """
        執(zhí)行完整的多智能體協(xié)作流程

        Args:
            task: 用戶需求描述
            max_revisions: 最大修改輪數(shù)

        Returns:
            包含所有階段輸出的字典
        """
        results = {"task": task, "phases": []}

        # ========== 第一階段:需求分析 + 技術(shù)調(diào)研 ==========
        print("\n?? 第一階段:技術(shù)調(diào)研")
        research_msg = Message(
            role="user", sender="Coordinator",
            content=f"請分析以下需求的技術(shù)方案:\n{task}"
        )
        research_result = self.researcher.think([research_msg])
        self._log("技術(shù)調(diào)研", research_result)
        results["phases"].append({
            "phase": "research", "output": research_result
        })

        # ========== 第二階段:代碼生成 ==========
        print("\n?? 第二階段:代碼生成")
        code_msg = Message(
            role="user", sender="Coordinator",
            content=f"""請根據(jù)以下需求和調(diào)研結(jié)果編寫代碼:

## 需求
{task}

## 技術(shù)調(diào)研結(jié)果
{research_result}

請直接輸出完整可運行的 Python 代碼。"""
        )
        code_result = self.coder.think([code_msg])
        self._log("代碼生成", code_result)
        results["phases"].append({
            "phase": "code", "output": code_result
        })

        # ========== 第三階段:代碼審查(可循環(huán)) ==========
        current_code = code_result
        revision = 0

        while revision <= max_revisions:
            print(f"\n?? 第三階段:代碼審查(第 {revision + 1} 次)")
            review_msg = Message(
                role="user", sender="Coordinator",
                content=f"請審查以下代碼:\n{current_code}"
            )
            review_result = self.reviewer.think([review_msg])
            self._log(f"代碼審查(第{revision+1}次)", review_result)

            # 檢查評分(簡單解析)
            score = self._extract_score(review_result)
            print(f"\n?? 當(dāng)前評分:{score}/10")

            if score >= 8 or revision == max_revisions:
                results["phases"].append({
                    "phase": "review",
                    "output": review_result,
                    "score": score
                })
                break

            # 分?jǐn)?shù)不夠,讓程序員修改
            print(f"\n?? 評分不足,進(jìn)入修改...")
            fix_msg = Message(
                role="user", sender="Coordinator",
                content=f"""請根據(jù)審查意見修改代碼:

## 審查意見
{review_result}

## 原始代碼
{current_code}

請輸出修改后的完整代碼。"""
            )
            current_code = self.coder.think([fix_msg])
            self._log(f"代碼修改(第{revision+1}次)", current_code)
            revision += 1

        results["final_code"] = current_code
        results["revisions"] = revision + 1

        return results

    def _extract_score(self, review_text: str) -> int:
        """從審查結(jié)果中提取評分"""
        for line in review_text.split("\n"):
            if "評分" in line and "/" in line:
                try:
                    score = int(line.split(":")[-1].strip().split("/")[0])
                    return score
                except (ValueError, IndexError):
                    pass
        return 5  # 默認(rèn)評分

4.4 主程序:啟動你的 AI 團(tuán)隊

# main.py
from agents import researcher, coder, reviewer
from coordinator import Coordinator
import json


def main():
    print("?? AI 研發(fā)小隊已就緒!")
    print("=" * 60)

    # 初始化協(xié)調(diào)者
    coordinator = Coordinator(researcher, coder, reviewer)

    # 示例任務(wù)
    task = "用 Python 寫一個文件批量重命名工具,支持按日期、序號、正則匹配重命名,需要命令行參數(shù)解析和日志記錄"

    # 執(zhí)行任務(wù)
    results = coordinator.run(task, max_revisions=2)

    # 輸出最終結(jié)果
    print("\n" + "=" * 60)
    print("? 任務(wù)完成!")
    print("=" * 60)
    print(f"\n?? 總修改輪數(shù):{results['revisions']}")
    print(f"\n?? 最終代碼:\n{results['final_code']}")

    # 保存結(jié)果
    with open("output.json", "w", encoding="utf-8") as f:
        json.dump(results, f, ensure_ascii=False, indent=2)
    print("\n?? 完整結(jié)果已保存到 output.json")


if __name__ == "__main__":
    main()

五、執(zhí)行流程詳解

六、擴展:加入工具能力

讓 Agent 不只是"說話",還能"做事":

# tools.py
import os
import subprocess


def write_file(path: str, content: str) -> str:
    """寫入文件"""
    os.makedirs(os.path.dirname(path) or ".", exist_ok=True)
    with open(path, "w", encoding="utf-8") as f:
        f.write(content)
    return f"文件已寫入: {path}"


def run_python(filepath: str) -> str:
    """運行 Python 文件并返回結(jié)果"""
    try:
        result = subprocess.run(
            ["python", filepath],
            capture_output=True, text=True, timeout=30
        )
        output = result.stdout
        if result.returncode != 0:
            output += f"\n? 錯誤:\n{result.stderr}"
        return output
    except subprocess.TimeoutExpired:
        return "執(zhí)行超時(30秒)"


# 將工具注冊到 Agent
AVAILABLE_TOOLS = {
    "write_file": {
        "func": write_file,
        "description": "將內(nèi)容寫入指定文件",
        "params": ["path", "content"]
    },
    "run_python": {
        "func": run_python,
        "description": "運行 Python 文件",
        "params": ["filepath"]
    }
}

七、性能對比

在我的測試環(huán)境(i7-13700K + 32GB 內(nèi)存,純 CPU 模式)下的表現(xiàn):

任務(wù)復(fù)雜度Agent 數(shù)量平均耗時修改輪數(shù)
簡單(單文件腳本)3~2 分鐘1 輪
中等(帶參數(shù)的工具)3~5 分鐘1-2 輪
復(fù)雜(多文件項目)4-5~10 分鐘2-3 輪

如有 GPU,速度可提升 3-5 倍。

八、注意事項

  1. Prompt 是靈魂:每個 Agent 的 System Prompt 決定了它的輸出質(zhì)量,值得反復(fù)打磨
  2. 防止死循環(huán):設(shè)置 max_revisions 上限,避免審查員和程序員無限互相"踢皮球"
  3. 上下文窗口:長對話會消耗大量 token,注意定期截斷歷史
  4. 錯誤處理:模型偶爾會輸出格式不符的內(nèi)容,需要做容錯解析
  5. 本地模型局限:8B 模型的多步推理能力有限,復(fù)雜任務(wù)建議用 GPT-5 或 Claude

總結(jié)

多智能體系統(tǒng)的核心理念:不是讓一個 AI 做所有事,而是讓多個專精 AI 各司其職、互相補位。

就像真正的團(tuán)隊一樣——沒有人是全能的,但一個好的團(tuán)隊可以。

以上就是純Python代碼從零構(gòu)建一個AI多智能體系統(tǒng)的詳細(xì)內(nèi)容,更多關(guān)于Python構(gòu)建AI多智能體系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實現(xiàn)剪貼板中轉(zhuǎn)換C語言代碼為printf語句

    Python實現(xiàn)剪貼板中轉(zhuǎn)換C語言代碼為printf語句

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)剪貼板中轉(zhuǎn)換C語言代碼為printf語句,可以用于運行代碼的追蹤,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-02-02
  • python os.listdir按文件存取時間順序列出目錄的實例

    python os.listdir按文件存取時間順序列出目錄的實例

    今天小編就為大家分享一篇python os.listdir按文件存取時間順序列出目錄的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python使用django調(diào)用deepseek api搭建ai網(wǎng)站

    python使用django調(diào)用deepseek api搭建ai網(wǎng)站

    DeepSeek是一家人工智能公司,致力于通過創(chuàng)新的技術(shù)和算法,推動人工智能領(lǐng)域的發(fā)展,本文給大家介紹了python使用django調(diào)用deepseek api搭建ai網(wǎng)站,文中有相關(guān)的代碼示例供大家參考,感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02
  • Python中的迭代器你了解嗎

    Python中的迭代器你了解嗎

    迭代器是一種特殊的對象,它實現(xiàn)了迭代協(xié)議,允許按照一定的順序逐個訪問元素,本文就來帶大家深入了解一下Python中迭代器的使用,需要的可以參考下
    2023-05-05
  • python wxpython 實現(xiàn)界面跳轉(zhuǎn)功能

    python wxpython 實現(xiàn)界面跳轉(zhuǎn)功能

    wxpython沒提供界面跳轉(zhuǎn)的方式,所以就需要借助threading模塊,本文給大家分享python wxpython 實現(xiàn)界面跳轉(zhuǎn)功能,感興趣的朋友跟隨小編一起看看吧
    2019-12-12
  • python操作docx寫入內(nèi)容,并控制文本的字體顏色

    python操作docx寫入內(nèi)容,并控制文本的字體顏色

    今天小編就為大家分享一篇python操作docx寫入內(nèi)容,并控制文本的字體顏色,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python實現(xiàn)exe小工具的詳細(xì)代碼

    Python實現(xiàn)exe小工具的詳細(xì)代碼

    Python exe工具是一種將Python代碼打包成可執(zhí)行文件的工具,它可以將Python程序轉(zhuǎn)換為獨立的可執(zhí)行文件,使得在沒有安裝Python解釋器的環(huán)境中也能夠運行Python程序,本文給大家介紹了Python實現(xiàn)exe小工具的詳細(xì)代碼,需要的朋友可以參考下
    2024-04-04
  • Python基于mediainfo批量重命名圖片文件

    Python基于mediainfo批量重命名圖片文件

    這篇文章主要介紹了Python基于mediainfo批量重命名圖片文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 什么是python的必選參數(shù)

    什么是python的必選參數(shù)

    在本篇文章里小編給大家分享的是一篇關(guān)于python必選參數(shù)是什么意思的相關(guān)知識點,需要的朋友們可以參考下。
    2020-06-06
  • Django多數(shù)據(jù)庫配置及逆向生成model教程

    Django多數(shù)據(jù)庫配置及逆向生成model教程

    這篇文章主要介紹了Django多數(shù)據(jù)庫配置及逆向生成model教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

云林县| 长白| 孟州市| 大港区| 太原市| 喀喇沁旗| 平利县| 嵊泗县| 靖州| 桂林市| 大邑县| 梅州市| 正定县| 梁河县| 墨竹工卡县| 隆林| 杭锦后旗| 静安区| 金堂县| 武鸣县| 大新县| 吉首市| 洛隆县| 黄平县| 镇巴县| 长子县| 齐河县| 麦盖提县| 呼伦贝尔市| 治多县| 库尔勒市| 措勤县| 商南县| 根河市| 西乡县| 永丰县| 夏邑县| 黄大仙区| 漳平市| 广昌县| 栖霞市|