我用多智能体架构做了一个智能写作系统

最近项目比较忙,没太多时间发文章。不过也没闲着,一直也在研究和思考多智能体架构的事,因为我觉得这是后面智能体发展的一条大主线。所以还是想发这篇文章,看是否会有感兴趣的朋友可以一起交流。

其实单智能体的能力总归是有上限的,而多智能体的协同则会产生巨大的乘数效应,每个智能体之间都可以互相交流,就像人类的合作生产一样,这种方式最终能达到的高度不可想象。

但是当前的各个主流智能体平台的工作流模式只能实现信息的单向流动(输入->输出),无法做到真正的多智能体协同,也就是双向,甚至多向交流。这也是为什么我觉得现在的工作流不是未来的大方向,智能体平台也需要进化了。

那怎么才能实现多智能体协同呢?

其实现在已经有不少多智能体框架可以选择,研究过的朋友一定知道,比如:LangGraph,AutoGen,CrewAI,AgentFlow,Automic Agents,等等。我在调研了一圈后发现这些框架各有各的优势和问题,有些框架要么太过复杂,要么偏学术研究,要么工程化能力差,最后我选择LangGraph作为落地实操的框架,因为它是目前最可工程化,最可落地的框架。

最近我就用LangGraph做了一个落地实验,做了一个多智能体写作系统,我给他取名叫双星智能写作系统。

顾名思义,这个写作系统有两个智能体,一个是写作智能体(writer),一个是评审智能体(reviewer),writer负责写文章,reviewer负责对文章进行评审和打分,两个智能体经过多轮交互以后,最终文章达到设定的目标分数或者预设的对话轮次则停止。以后再加一个智能体,是不是就可以叫三体智能写作系统了?

这个写作系统就是模仿我们平时自己写文章的方法。因为我们自己也很少有一次写好的,一般都是写个初稿,然后再反复的改几次,最终才定稿。因此这个系统的工作流程是这样的:

  1. 写作智能体根据输入的写作需求,文案风格和参考资料写初稿

  2. 评审智能体根据评审要求给出评审意见并打分

  3. 系统判断文章分数是否已达标,或者对话轮次已满,如果是,则结束,如果否则继续

你看其实整个流程非常简单,只要引入多智能体的沟通方式,就可以很轻松的实现。

个人觉得这个写作系统最终还是达到了我预期的效果,确实能够通过多轮对话,把文章最终调教到预期的方向。

下面是个示例,由于篇幅有限,我这个图里只展示了最终文案和第一轮对话的过程。

当然这个写作系统并不是你想象的那么容易上手,他需要你给定写作风格和评审风格,你给的写作风格和评审风格越靠谱,则系统出来的文章就越靠谱,系统帮你做的只是不断的修改的过程,但是要写成什么样,还是需要你的提示词来约束。因此,目前这个系统更多是面向专业的使用者,需要用户有一套自己的写作和评审体系。

其实这个工作流程同样可以适用其他场景,只要是遵循"输出->反馈->修订"这种流程的场景都可以应用。

这里放出相关的核心代码给大家参考

复制代码
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain.prompts import ChatPromptTemplate
from langchain.llms import OpenAI

# 定义共享状态
class WritingState(TypedDict):
    topic: str  # 写作主题
    draft: Annotated[str, "writer生成的文章草稿"]
    review_feedback: Annotated[str, "reviewer的评审反馈"]
    review_score: Annotated[int, "reviewer给出的文章分数"]
    revision_count: int  # 修订次数,防止无限循环
    final_report: Annotated[str, "最终文章"]

# 初始化智能体节点
def writer_node(state: WritingState):
    print("--- 节点: writer ---")
    topic = state["topic"]
    review_feedback = state["review_feedback"]
    # 构建prompt
    if review_feedback:
        prompt = f"根据主题{topic}和反馈意见{review_feedback},修改文章内容。"
    else:
        prompt = f"根据主题{topic},撰写文章内容。"
    llm = OpenAI(model_name="gpt-3.5-turbo")
    draft = llm(prompt)
    # 更新修订次数
    revision_count = state["revision_count"] + 1
    return {"draft": draft, "revision_count": revision_count}

def reviewer_node(state: WritingState):
    print("--- 节点: reviewer ---")
    draft = state["draft"]
    # 构建prompt
    prompt = f"请对文章内容{draft}进行评审,并给出一个0到100的分数。"
    llm = OpenAI(model_name="gpt-3.5-turbo")
    response = llm(prompt)
    # 解析评审结果
    review_score = int(response.split(":")[1].strip())
    review_feedback = response.split(":")[0].strip()
    return {"review_feedback": review_feedback, "review_score": review_score}

# 定义条件边
def should_continue(state: WritingState):
    print("--- 条件判断 ---")
    # 如果达到最大修订次数,或文章分数达到目标分数,则结束
    if state["revision_count"] > 3 or state["review_score"] >= 80:
        return END
    else:
        # 否则,打回给writer
        return"writer"

# 构建工作流图
def create_workflow_graph():
    workflow = StateGraph(WritingState)
    # 添加节点
    workflow.add_node("writer", writer_node)
    workflow.add_node("reviewer", reviewer_node)
    # 设置入口点
    workflow.set_entry_point("writer")
    # 添加边缘
    workflow.add_edge("writer", "reviewer")
    # 添加条件边
    workflow.add_conditional_edges(
        "reviewer", should_continue, {
            "writer": "writer",
            END: END
        }
    )
    # 编译图
    return workflow.compile()

# 运行多智能体系统
if __name__ == "__main__":
    # 创建工作流
    app = create_workflow_graph()
    # 定义写作主题
    topic = "人工智能的发展趋势"
    # 初始化状态
    initial_state = WritingState(
        topic=topic,
        draft="",
        review_feedback="",
        review_score=0,
        revision_count=0,
        final_report=""
    )
    # 运行工作流
    final_state = None
    for step in app.stream(initial_state):
        # 打印每个步骤的结果
        for node, values in step.items():
            print(f"\n--- {node} 完成 ---")
            if node == "writer":
                print(f"文章草稿: {values['draft'][:200]}...")
            elif node == "reviewer":
                print(f"评审反馈: {values['review_feedback']}")
                print(f"评审分数: {values['review_score']}")
        final_state = values
    # 输出最终文章
    if final_state:
        print("\n\n=== 最终文章 ===")
        print(final_state["draft"])

以上就是我最近在多智能体方向的一些思考和实践,我对多智能体的研究也才刚刚开始,后面会继续深入实践,希望和志同道合的你多多交流,欢迎在评论区给我留言。

更多精彩内容推荐:

-> AI智能体学习&实战

-> 私域AI机器人

-> 自媒体AIP打造

-> AI应用

相关推荐
ejjdhdjdjdjdjjsl10 小时前
JSON序列化与反序列化实战指南
数据库·microsoft·c#
我是人机不吃鸭梨1 天前
Flutter AI 集成革命(2025版):从 Gemini 模型到智能表单验证器的终极方案
开发语言·javascript·人工智能·flutter·microsoft·架构
檐下翻书1731 天前
工具调用型智能体的通用接口设计
microsoft
QT 小鲜肉1 天前
【Linux命令大全】001.文件管理之mtoolstest命令(实操篇)
linux·运维·前端·笔记·microsoft
chilavert3181 天前
技术演进中的开发沉思-277 AJax :Calendar
前端·javascript·microsoft·ajax
Mr_Xuhhh1 天前
LangChain工具调用完全指南:从基础到实战
microsoft
winfreedoms1 天前
微软商店安装的 WSL Ubuntu如何移动到其他目录下
ubuntu·microsoft·wsl
老狼买了个克2 天前
Inventor 二次开发从入门到精通(12)高级应用
microsoft·二次开发·cad二次开发·机械设计·inventor·机械制造
QT 小鲜肉2 天前
【Linux命令大全】001.文件管理之mdu命令(实操篇)
linux·运维·服务器·chrome·笔记·microsoft
大明二代2 天前
基于 Microsoft Graph API 与 React Email 构建现代化邮件发送系统
前端·react.js·microsoft