变革来袭!多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

目录
相关文章
|
1天前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
6天前
|
监控 Java Maven
揭秘Java Agent技术:解锁Java工具开发的新境界
作为JDK提供的关键机制,Java Agent技术不仅为Java工具的开发者提供了一个强大的框架,还为性能监控、故障诊断和动态代码修改等领域带来了革命性的变革。本文旨在全面解析Java Agent技术的应用场景以及实现方式,特别是静态加载模式和动态加载模式这两种关键模式。
55 0
|
6天前
|
人工智能 API 决策智能
【AI Agent系列】【阿里AgentScope框架】实战1:利用AgentScope实现动态创建Agent和自由组织讨论
【AI Agent系列】【阿里AgentScope框架】实战1:利用AgentScope实现动态创建Agent和自由组织讨论
177 2
|
6天前
|
人工智能 决策智能 C++
【AI Agent系列】【阿里AgentScope框架】5. Pipeline模块的组合使用及Pipeline模块总结
【AI Agent系列】【阿里AgentScope框架】5. Pipeline模块的组合使用及Pipeline模块总结
69 1
|
6天前
|
人工智能 决策智能
【AI Agent系列】【阿里AgentScope框架】4. 深入源码:Pipeline模块如何组织多智能体间的数据流?- 循环结构
【AI Agent系列】【阿里AgentScope框架】4. 深入源码:Pipeline模块如何组织多智能体间的数据流?- 循环结构
57 0
|
6天前
|
人工智能 决策智能
【AI Agent系列】【阿里AgentScope框架】3. 深入源码:Pipeline模块如何组织多智能体间的数据流?- 顺序结构与条件分支
【AI Agent系列】【阿里AgentScope框架】3. 深入源码:Pipeline模块如何组织多智能体间的数据流?- 顺序结构与条件分支
51 2
|
6天前
|
人工智能 决策智能 C++
【AI Agent教程】【MetaGPT】案例拆解:使用MetaGPT实现“狼人杀“游戏(1)- 整体框架解析
【AI Agent教程】【MetaGPT】案例拆解:使用MetaGPT实现“狼人杀“游戏(1)- 整体框架解析
172 1
|
6天前
|
人工智能 决策智能
【AI Agent系列】【阿里AgentScope框架】2. Pipeline模块入门:使用Pipeline模块实现最简单的多智能体交互
【AI Agent系列】【阿里AgentScope框架】2. Pipeline模块入门:使用Pipeline模块实现最简单的多智能体交互
69 0
|
6天前
|
人工智能 搜索推荐 决策智能
【AI Agent系列】【阿里AgentScope框架】1. 深入源码:详细解读AgentScope中的智能体定义以及模型配置的流程
【AI Agent系列】【阿里AgentScope框架】1. 深入源码:详细解读AgentScope中的智能体定义以及模型配置的流程
149 0
|
6天前
|
存储 人工智能 开发框架
【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序
【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序
219 0

热门文章

最新文章