变革来袭!多Agent框架MuAgent带你解锁代码开发新姿势

简介: 在这个信息技术爆炸的时代,我们都知道大型语言模型(LLM)拥有处理复杂问题的能力,但当遇到编程难题这种更高级的挑战时,单独的LLM Agent可能就不够看了。社区里动起了脑筋,玩出了新花样——组合多个Agent来应对高难度挑战!正如Multi Agent的构建过程所示,与其说我们是在设计Agents,不如说是对当前需求的深入理解后去构建出一条专属于某个场景的SOP。

image.png

在这个信息技术爆炸的时代,我们都知道大型语言模型(LLM)拥有处理复杂问题的能力,但当遇到编程难题这种更高级的挑战时,单独的LLM Agent可能就不够看了。社区里动起了脑筋,玩出了新花样——组合多个Agent来应对高难度挑战!正如Multi Agent的构建过程所示,与其说我们是在设计Agents,不如说是对当前需求的深入理解后去构建出一条专属于某个场景的SOP。


功能演示:在muAgent里能够实现本地代码库的问答功能

1、能够支持java代码库导入,并转换成向量数据、图数据以及传统数据库的内容

# delete codebase
codebase_name = 'client_local'
code_path = "D://chromeDownloads/devopschat-bot/client_v2/client"
# initialize codebase
use_nh = True
do_interpret = True
cbh = CodeBaseHandler(codebase_name, code_path, crawl_type='dir', use_nh=use_nh, local_graph_path=CB_ROOT_PATH,
                      llm_config=llm_config, embed_config=embed_config)
cbh.import_code(do_interpret=do_interpret)

1713256586827-399e4eaa-ce33-4495-97c4-af4eec0959f2.gif


2、在有了代码库之后,就可以基于语言模型来完成代码库问答

# 
phase_name = "codeChatPhase"
phase = BasePhase(
    phase_name, embed_config=embed_config, llm_config=llm_config,
)
# 
query_content = "remove 这个函数是做什么的"
query = Message(
    role_name="user", role_type="human", input_query=query_content,
    code_engine_name=codebase_name, score_threshold=1.0, top_k=3, cb_search_type="tag",
    local_graph_path=CB_ROOT_PATH, use_nh=use_nh
    )
output_message3, output_memory3 = phase.step(query)
# print(output_message3)
print(output_memory3.to_str_messages(return_all=True, content_key="parsed_output_list"))

截屏2024-04-24 10.43.38.png


3、下面,我们还可以基于代码库完成代码库转API文档工作,代码库自动生成测例的工作

图片.gif



那我们的muAgent是如何完成multi-agent的涉及工作的呢?

🏗️【muAgent框架大揭秘】

想象一下,你现在需要去用LLM来串联专属你的个性化业务场景SOP流程。那按照正常的Agent开发流程,我们首先需要定义每一个Agent的Prompt,其次将prompt传入到LLM接口进行调用,并将当前Agent的输出进行特定逻辑的后处理,再合并到下一个Agent的Prompt上,去获取它的输出,重复上述流程直到任务完成。而当这个SOP流程较长和复杂时,反复定义这样的Agent以及多种后处理会显得过于繁琐。


那muAgent就是为了解决这个问题并帮助大家快速实现SOP的串联。为了快速定义了Agent交互链路,我们要理解multi-agent的核心过程就在于如何把上一个agent的输出给到下一个agent的输入,其中需要涉及到llm的输出、具体action的执行以及信息的解析处理。为此,muAgent 巧妙地设计了Memory Manager 和 Prompt Manager 两个杀手级组件,能够管理长篇的聊天历史记录和自动化构筑 Prompts 。从而打造了一个扩展性满满、易用性爆表的多Agent超级框架!

image.png


【四种Agent类型,满足你的一切幻想】

在Agent层面,提供四种基本的Agent类型,对这些Agent进行Role的基础设定,可满足多种通用场景的交互和使用。所有的Action都由Agent执行。

  • BaseAgent:基础功打得溜,问答、工具使用、代码执行样样行。
  • ReactAgent:标准React流,遇事不慌,标准反应流程轻松应对。
  • ExecutorAgent:对任务清单进行顺序执行,根据 User 或 上一个Agent编排的计划,完成相关任务,排个队,挨个干!
  • SelectorAgent:挑三拣四,根据User 或 上一个 Agent的问题选择合适的Agent,总能找到最合适的Agent回答用户需求。

image.png


🔁【Communication进化论】

信息如同血液,Agent之间的通信变得前所未有的流畅,各类重要数据在Agents间如同接力赛跑,无缝传递!

  • System Content:用于存储管理当前LLM输出的时间,Role信息等
  • Info Content:LLM辅助信息,比如像知识库查询信息、代码库检索信息、工具信息、Agent信息等
  • LLM Content:直接存储和传递LLM 产生的信息
  • LLM Parsed Content:对LLM进行解析转成更易操作的key-value数据结构,方便对LLM内容进行过滤
  • Customized Content:用于管理自定义action产生的key-value数据内容,用于后续自定义Prompt模板的组装构建


🤖【Memory Manager记忆强化】

你的虚拟开发团队记忆力惊人,不管是保存、压缩还是检索聊天历史,他们能在数据库的海洋中自如潜泳。

  • 存储管理:在数据库或本地实现对chat history进行save和load管理,包括user input、 llm output、observation ouput
  • 信息压缩:对 chat history 进行关键信息压缩总结 summary context,比如说单文本概况、侧重不同角度进行文本概况、关键信息提取、多文本概况,作为 Prompt context
  • 记忆检索:提供基础检索功能,检索 chat history 或者 Summary Context 中与问题相关信息,辅助问答


🛠️【Prompt Manager – 大脑核心】

如何让多个大模型分工并协调好LLM并来引导它们产生期望的输出,其本质就是将业务问题抽象并拆解到可执行的Prompt,让他们像处理业务问题一样精准执行。Prompt Manager正是这个大脑——将各类Prompts巧妙组装,从而驱动LLM Agents发挥出惊人的生产力!


muAgent 将Prompt Manager模块中分为 System Prompt、Context Prompt、Customized Prompt三部分

  • System Prompt 包括 Role Name、Role Description、Task等,即希望模型执行的特定任务。
  • Context Prompt 包括 Doc Context、Code Context、Tool Context、Agent Context、Session Context等,即希望模型理解的请求所需的背景信息。
  • Customized Prompt 则是 自定义的一些 Input 和 Ouput,即模型需要处理的数据和期望的输出类型或格式的信号。

image.png


💻【Retrieval、Tool、Action – 辅助生态组件,muAgent框架的得力小助手】

  • Retrieval:好比虚拟团队的知识库管理员,有求必应。集成了Doc、Internet Search、Code Retrieval三种检索信息的方式,定义了一个抽象IMRetrieval类,可支持开发者自定义个性化的知识库,来完成Agent的知识库注册。
  • Tool:工具百宝箱,任你挑选,一键调用解决问题。支持Agent完成Tool的注册和langchain Tool接口的直接使用。
  • Action:作为LLM具体要执行的动作或动作流,会包括LLM信息处理、知识检索、工具调用以及代码执行等一个综合性的复杂过程,只要下达指令,他们就能将计划变成现实。


🏡【私人定制不是梦】

更炫的是,muAgent框架支持私有化定制,无论是个性化的LLM还是深情的嵌入式Embedding服务,只要你想,就能搞定!


🌟所以,还等什么?让我们一同携手muAgent框架,解锁编程世界的新潜力,体验创造力的大爆炸吧!🎉🎉🎉

image.png


通过 执行pip install codefuse-muagent 然后就能上手使用了

from muagent.connector.agents import ReactAgent, SelectorAgent
from muagent.connector.schema import Role, Message, ChainConfig
from muagent.llm_models.llm_config import EmbedConfig, LLMConfig
llm_config = LLMConfig(
    model_name=model_name, api_key=api_key,  api_base_url=api_base_url, temperature=0.3,
    stop="**Observation:**"
)
embed_config = EmbedConfig(
    embed_engine="model", embed_model=embed_model, embed_model_path=embed_model_path
)
# 定义了基于react的tool agent
tool_role = Role(role_type="assistant", role_name="tool_reacter", prompt=REACT_TOOL_PROMPT)
tool_react_agent = ReactAgent(role=tool_role,chat_turn=3,
    llm_config=llm_config, embed_config=embed_config,
)
# 定义了基于react的code agent
code_role = Role(role_type="assistant", role_name="code_reacter", prompt=REACT_CODE_PROMPT)
code_react_agent = ReactAgent(role=code_role, chat_turn=3,
    llm_config=llm_config, embed_config=embed_config,
)
prompt = """#### Agent Profile
Your goal is to response according the Context Data's information with the role that will best facilitate a solution, taking into account all relevant context (Context) provided.
When you need to select the appropriate role for handling a user's query, carefully read the provided role names, role descriptions and tool list.
#### Response Output Format
**Thoughts:** think the reason step by step about why you selecte one role
**Role:** Select the role from agent names.
"""
# 定义了一个groupAgent
role = Role(role_type="assistant", role_name="qaer", prompt=prompt)
base_agent = SelectorAgent(role=role,chat_turn=3,
    llm_config=llm_config, embed_config=embed_config,
    group_agents=[tool_react_agent, code_react_agent]
)
# 
question = "确认本地是否存在employee_data.csv,并查看它有哪些列和数据类型;然后画柱状图"
query = Message(role_type="user", role_name="user", input_query=question,tools=tools,)
output_message = base_agent.step(query)
print(output_message.role_content)



还可以支持CodeFuse-Chatbot的多种问答功能,CodeFuse-Chatbot使用演示视频:

https://www.youtube.com/watch?v=ex5sbwGs3Kg&ab_channel=HaotianZhu


项目链接

[1] https://github.com/codefuse-ai/CodeFuse-muAgent

[2] https://github.com/codefuse-ai/codefuse-chatbot

[3] https://github.com/codefuse-ai

目录
相关文章
|
4月前
|
存储 API
LangChain与智能Agent构建问题之MetaGPT中工程师智能体代码错误如何解决
LangChain与智能Agent构建问题之MetaGPT中工程师智能体代码错误如何解决
54 1
|
2月前
|
JSON JavaScript 数据可视化
开发 CNode 技术社区智能体
CNode 社区是国内最大的 Node.js 开源技术社区,致力于 Node.js 技术研究。本文基于 Botnow 平台,通过创建 Bot、插件及工作流,详细介绍了如何利用 CNode 社区的开放 API 构建智能体,并最终发布上线,实现智能化交互功能。
|
18天前
|
敏捷开发 机器学习/深度学习 数据采集
端到端优化所有能力,字节跳动提出强化学习LLM Agent框架AGILE
【10月更文挑战第23天】字节跳动研究团队提出AGILE框架,通过强化学习优化大型语言模型(LLM)在复杂对话任务中的表现。该框架将LLM作为核心决策模块,结合记忆、工具和专家咨询模块,实现智能体的自我进化。实验结果显示,AGILE智能体在ProductQA和MedMCQA数据集上优于GPT-4。
77 4
|
20天前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
146 6
|
1月前
|
数据采集 人工智能 自然语言处理
Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股)AI Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
1月前
|
人工智能 JSON 自然语言处理
开源模型+Orchestrating Agents多智能体框架,易用、强大且可控
本文采用开源Qwen2.5-14B-instruct-GGUF来体验多智能体编排和交接,希望在体验多智能体编排和交接框架的同时,一起评估中小参数规模的模型(14B)能否较好的完成多智能体任务。
|
3月前
|
人工智能 自然语言处理 算法
可自主进化的Agent?首个端到端智能体符号化训练框架开源了
【8月更文挑战第13天】近年来,AI领域在构建能自主完成复杂任务的智能体方面取得重大突破。这些智能体通常基于大型语言模型,可通过学习适应环境。为简化设计流程,AIWaves Inc.提出智能体符号化学习框架,使智能体能在数据中心模式下自我优化,以推进通向通用人工智能的道路。该框架将智能体视作符号网络,利用提示、工具及其组合方式定义可学习的权重,并采用自然语言模拟反向传播和梯度下降等学习过程,指导智能体的自我改进。实验显示,此框架能有效促进智能体的自主进化。尽管如此,该框架仍面临高质量提示设计及计算资源需求高等挑战。论文详情参见:https://arxiv.org/pdf/2406.18532。
177 58
|
2月前
|
人工智能 安全 量子技术
大疆DJI无人机等你来拿,蚂蚁集团agentUniverse 多智能体框架有奖征文
agentUniverse有奖征文活动来啦!分享agentUniverse的实践经验、亦或是剖析市面上各路智能体技术理念、对比开源框架的洞见,都有机会获得大疆无人机!
大疆DJI无人机等你来拿,蚂蚁集团agentUniverse 多智能体框架有奖征文
|
1月前
|
人工智能 安全 机器人
Dify开发Agent对接钉钉机器人
这篇文章详细讲解了如何在Dify平台上开发一个Agent并与钉钉机器人集成,实现自动化消息处理和响应功能。
160 0
|
2月前
|
弹性计算 自然语言处理 API
如何速成RAG+Agent框架大模型应用搭建
本文侧重于能力总结和实操搭建部分,从大模型应用的多个原子能力实现出发,到最终串联搭建一个RAG+Agent架构的大模型应用。