update luban multi-agent readme

This commit is contained in:
shanshi 2023-12-27 17:40:54 +08:00
parent 92bb3b439a
commit 29594e1325
6 changed files with 253 additions and 54 deletions

View File

@ -36,7 +36,7 @@ DevOps-ChatBot是由蚂蚁CodeFuse团队开发的开源AI智能助手致力
💡 本项目旨在通过检索增强生成Retrieval Augmented GenerationRAG、工具学习Tool Learning和沙盒环境来构建软件开发全生命周期的AI智能助手涵盖设计、编码、测试、部署和运维等阶段。 逐渐从各处资料查询、独立分散平台操作的传统开发运维模式转变到大模型问答的智能化开发运维模式,改变人们的开发运维习惯。 💡 本项目旨在通过检索增强生成Retrieval Augmented GenerationRAG、工具学习Tool Learning和沙盒环境来构建软件开发全生命周期的AI智能助手涵盖设计、编码、测试、部署和运维等阶段。 逐渐从各处资料查询、独立分散平台操作的传统开发运维模式转变到大模型问答的智能化开发运维模式,改变人们的开发运维习惯。
本项目核心差异技术、功能点: 本项目核心差异技术、功能点:
- **🧠 智能调度核心:** 构建了体系链路完善的调度核心,支持多模式一键配置,简化操作流程。 - **🧠 智能调度核心:** 构建了体系链路完善的调度核心,支持多模式一键配置,简化操作流程。 [使用说明](sources/readme_docs/multi-agent.md)
- **💻 代码整库分析:** 实现了仓库级的代码深入理解,以及项目文件级的代码编写与生成,提升了开发效率。 - **💻 代码整库分析:** 实现了仓库级的代码深入理解,以及项目文件级的代码编写与生成,提升了开发效率。
- **📄 文档分析增强:** 融合了文档知识库与知识图谱,通过检索和推理增强,为文档分析提供了更深层次的支持。 - **📄 文档分析增强:** 融合了文档知识库与知识图谱,通过检索和推理增强,为文档分析提供了更深层次的支持。
- **🔧 垂类专属知识:** 为DevOps领域定制的专属知识库支持垂类知识库的自助一键构建便捷实用。 - **🔧 垂类专属知识:** 为DevOps领域定制的专属知识库支持垂类知识库的自助一键构建便捷实用。
@ -94,6 +94,8 @@ DevOps-ChatBot是由蚂蚁CodeFuse团队开发的开源AI智能助手致力
请自行安装 nvidia 驱动程序,本项目已在 Python 3.9.18CUDA 11.7 环境下Windows、X86 架构的 macOS 系统中完成测试。 请自行安装 nvidia 驱动程序,本项目已在 Python 3.9.18CUDA 11.7 环境下Windows、X86 架构的 macOS 系统中完成测试。
Docker安装、私有化LLM接入及相关启动问题见[快速使用明细](sources/readme_docs/start.md)
1、python 环境准备 1、python 环境准备
- 推荐采用 conda 对 python 环境进行管理(可选) - 推荐采用 conda 对 python 环境进行管理(可选)
@ -110,45 +112,7 @@ cd codefuse-chatbot
pip install -r requirements.txt pip install -r requirements.txt
``` ```
2、沙盒环境准备 2、基础配置
- windows Docker 安装:
[Docker Desktop for Windows](https://docs.docker.com/desktop/install/windows-install/) 支持 64 位版本的 Windows 10 Pro且必须开启 Hyper-V若版本为 v1903 及以上则无需开启 Hyper-V或者 64 位版本的 Windows 10 Home v1903 及以上版本。
- [【全面详细】Windows10 Docker安装详细教程](https://zhuanlan.zhihu.com/p/441965046)
- [Docker 从入门到实践](https://yeasy.gitbook.io/docker_practice/install/windows)
- [Docker Desktop requires the Server service to be enabled 处理](https://blog.csdn.net/sunhy_csdn/article/details/106526991)
- [安装wsl或者等报错提示](https://learn.microsoft.com/zh-cn/windows/wsl/install)
- Linux Docker 安装:
Linux 安装相对比较简单,请自行 baidu/google 相关安装
- Mac Docker 安装
- [Docker 从入门到实践](https://yeasy.gitbook.io/docker_practice/install/mac)
```bash
# 构建沙盒环境的镜像notebook版本问题见上述
bash docker_build.sh
```
3、模型下载可选
如需使用开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。
此处以 THUDM/chatglm2-6bm 和 text2vec-base-chinese 为例:
```
# install git-lfs
git lfs install
# install LLM-model
git lfs clone https://huggingface.co/THUDM/chatglm2-6b
# install Embedding-model
git lfs clone https://huggingface.co/shibing624/text2vec-base-chinese
cp ~/shibing624/text2vec-base-chinese ~/codefuse-chatbot/embedding_models/
```
4、基础配置
```bash ```bash
# 修改服务启动的基础配置 # 修改服务启动的基础配置
@ -161,13 +125,18 @@ os.environ["OPENAI_API_KEY"] = "sk-xxx"
# 可自行替换自己需要的api_base_url # 可自行替换自己需要的api_base_url
os.environ["API_BASE_URL"] = "https://api.openai.com/v1" os.environ["API_BASE_URL"] = "https://api.openai.com/v1"
# vi model_config#105 你需要选择的语言模型 # vi model_config#LLM_MODEL 你需要选择的语言模型
LLM_MODEL = "gpt-3.5-turbo" LLM_MODEL = "gpt-3.5-turbo"
LLM_MODELs = ["gpt-3.5-turbo"]
# vi model_config#43 你需要选择的向量模型 # vi model_config#EMBEDDING_MODEL 你需要选择的私有化向量模型
EMBEDDING_ENGINE = 'model'
EMBEDDING_MODEL = "text2vec-base" EMBEDDING_MODEL = "text2vec-base"
# vi model_config#25 修改成你的本地路径如果能直接连接huggingface则无需修改 # vi model_config#embedding_model_dict 修改成你的本地路径如果能直接连接huggingface则无需修改
# 若模型地址为:
model_dir: ~/codefuse-chatbot/embedding_models/shibing624/text2vec-base-chinese
# 配置如下
"text2vec-base": "shibing624/text2vec-base-chinese", "text2vec-base": "shibing624/text2vec-base-chinese",
# vi server_config#8~14, 推荐采用容器启动服务 # vi server_config#8~14, 推荐采用容器启动服务
@ -178,7 +147,7 @@ SANDBOX_DO_REMOTE = True
NO_REMOTE_API = True NO_REMOTE_API = True
``` ```
5、启动服务 3、启动服务
默认只启动webui相关服务未启动fastchat可选 默认只启动webui相关服务未启动fastchat可选
```bash ```bash
@ -189,9 +158,11 @@ NO_REMOTE_API = True
# start llm-service可选 # start llm-service可选
python dev_opsgpt/service/llm_api.py python dev_opsgpt/service/llm_api.py
``` ```
更多LLM接入方法见[详情...](sources/readme_docs/fastchat.md)
<br>
```bash ```bash
# 配置好server_config.py后,可一键启动 # 完成server_config.py配置后,可一键启动
cd examples cd examples
python start.py python start.py
``` ```

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

BIN
sources/docs_imgs/luban.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

View File

@ -0,0 +1,113 @@
## 📜 目录
- [简介](#简介)
- [模块介绍](#模块介绍)
- [快速使用](#快速使用)
## 简介
为了提高大型模型在推理准确性方面的表现,业界出现了多种创新的大型语言模型(LLM)玩法。从最早的CoT、ToT到GoT这些方法不断拓展了LLM的能力边界。在处理复杂问题时我们可以通过ReAct过程来选择、调用和执行工具反馈同时实现多轮工具使用和多步骤执行。
但对于更复杂的场景例如复杂代码的开发单一功能的LLM Agent显然难以胜任。因此社区开始发展出多Agent的组合玩法比如专注于metaGPT、GPT-Engineer、chatDev等开发领域的项目以及专注于自动化构建Agent和Agent对话的AutoGen项目。
经过对这些框架的深入分析发现大多数的Agent框架整体耦合度较高其易用性和可扩展性较差。在预设场景中实现特定场景但想要进行场景扩展却困难重重。
因此我们希望构建一个可扩展、易于使用的Multi-Agent框架以支持ChatBot在获取知识库信息的同时能够辅助完成日常办公、数据分析、开发运维等各种通用任务。
本项目的Mutli-Agent框架汲取兼容了多个框架的优秀设计比如metaGPT中的消息池message pool、autogen中的代理选择器agent selector等。
<div align=center>
<img src="../docs_imgs/luban.png" alt="图片">
</div>
以下模块将从5个方面介绍Multi Agent框架所需要素
- Agent Communication在Multi Agent框架中确保Agent可以有效地进行信息交流对于管理上下文以及提高问答效率至关重要。
a. 遵循简洁直观易于理解的链式对话原则将Agent以线性方式排列串连成一个执行链路。
b. 借鉴metaGPT中的Message Pool框架允许Agent对Message Pool进行推送和订阅使链路更加灵活。有利于精细化Prompt工程的场景但难以把握复杂链路的关系分析。
- Standard Operation ProcessSOP对LLM的生成结果进行标准化解析和处理。
a. 定义Agent的 Input 和 Output 范围能够组装和解析相关Action和Status保证框架运行的稳定性
b. 封装多种基础Action执行模块如Tool Using、Planning、Coding、Direct Answering、final answer等SOP标识以满足Agent的基本工作需求。
- Plan and Executor增加LLM的Tool使用、Agent调度、代码的生成。设置了几种基本链路例如
a. 单轮问答也可以扩展到CoT、ToT、GoT等形式。
b. ReAct基础的响应决策过程模型设置SOP 状态以终止循环
c. TaskPlaning - Executor任务完成即可结束
- Long-short term memory ManagementMulti-Agent与单Agent的关键区别在于Multi-Agent需要处理大量的交流信息类似人类团队协作的过程。增加一个专门负责内容总结类似于会议助理的Agent对长期记忆进行总结并提更有效信息传递给下一位Agent而非传递所有内容给下一位Agent。
- Human-agent interaction面对复杂场景时需要人类介入Agent交互过程并提供反馈。通过上述 Long-short term memory Management 和 Agent Communication 过程使LLM能准确理解人类的意图从而更有效地完成任务。
总的来说这五个要素共同构建了一个Multi Agent框架确保Agent之间的协作更加紧密和高效同时也能够适应更复杂的任务需求和更多样的交互场景。通过组合多个Agent链路来实现一个完整且复杂的项目上线场景Dev Phase如Demand ChainCEO、Product Arguement ChainCPO、CFO、CTO、Engineer Group ChainSelector、Developer1~N、QA Engineer ChainDeveloper、Tester、Deploy ChainDeveloper、Deploer
## 模块介绍
为了便于大家理解整个Multi-Agent的链路我们采取 Flow 的形式来详细介绍如何通过配置构建
<div align=center>
<img src="../docs_imgs/agent-flow.png" alt="图片">
</div>
<br>下面,我们先介绍相关的模块<br>
### Agent
在Agent设计层面我们提供了四种基本的Agent类型对这些Agent进行Role的基础设定可满足多种通用场景的交互和使用
1. BaseAgent提供基础问答、工具使用、代码执行的功能根据Prompt格式实现 输入 => 输出
2. ExecutorAgent对任务清单进行顺序执行根据 User 或 上一个Agent编排的计划完成相关任务
3. ReactAgent提供标准React的功能根据问题实现当前任务
4. SelectorAgent提供选择Agent的功能根据User 或 上一个 Agent的问题选择合适的Agent来进行回答.
输出后将 message push 到 memory pool 之中后续通过Memory Manager进行管理
### Chain
基础链路BaseChain串联agent的交互完成相关message和memory的管理
### Phase
基础场景BasePhase串联chain的交互完成相关message和memory的管理
### Prompt Manager
Mutli-Agent链路中每一个agent的prompt创建
1. 通过对promtp_input_keys和promtp_output_keys对的简单设定可以沿用预设 Prompt Context 创建逻辑从而实现agent prompt快速配置
2. 也可以对prompt manager模块进行新的 key-context 设计,实现个性化的 Agent Prompt
Memory Manager
主要用于 chat history 的管理,暂未完成
● 将chat history在数据库进行读写管理包括user input、 llm output、doc retrieval、code retrieval、search retrieval
● 对 chat history 进行关键信息总结 summary context作为 prompt context
● 提供检索功能,检索 chat history 或者 summary context 中与问题相关信息,辅助问答
### Role Config
|Config Key Name| Type| Description|
| ------------------ | ---------- | ---------- |
|role_prompt| String |角色描述|
|role_type |String |Enum: assistant|
|role_name |String |角色名称用于后续prompt context的组装和筛选|
|agent_type |String |EnumBaseAgent、SelectorAgent、ExecutorAgent、ReactAgent 也可以继承以上几种Agent然后去构造相关的Agent|
|focus_agents |List[String] |metagpt的逻辑关注哪些agent生成的message可选值范围为role_name
|focus_message_keys |List[String]| 额外增加的逻辑关注message里面具体的 key 信息可选值范围为agent 的 output_keys|
|promtp_input_keys |List[String] |Enum|
|promtp_output_keys |List[String] |Enum|
|chat_turn |int |只针对ReactAgent有效|
### Chain Config
|Config Key Name| Type |Description|
| ------------------ | ---------- | ---------- |
|chain_prompt |String| chain的描述|
|chain_name| String |角色名称用于后续prompt context的组装和筛选|
|chain_type| String| EnumBaseChain 也可以继承以上Chain构造相关的Chain
|agents |List[String] |chain当中存在的agent以及agent的执行顺序|
|chat_turn |int agent之间的交互轮数|
### Phase Config
|Config Key Name |Type |Description|
| ------------------ | ---------- | ---------- |
|phase_name| String| 场景名称|
|phase_type |String |EnumBasePhase 也可以继承以上Phase自定义构造相关的Phase|
|chains |List[String] |phase当中存在的chain以及chain的执行顺序|
|do_doc_retrieval |bool |在场景执行开始判断是否需要补充额外信息|
|do_code_retrieval| bool |在场景执行开始判断是否需要补充额外信息|
|do_tool_retrieval |bool |在场景执行开始判断是否需要补充额外信息|
## 快速使用
Comming soon

View File

@ -2,7 +2,7 @@
## RoadMap ## RoadMap
<div align=center> <div align=center>
<img src="../../sources/docs_imgs/devops-chatbot-module.png" alt="图片" width="600" height="400"> <img src="../../sources/docs_imgs/devops-chatbot-module-v2.png" alt="图片" width="600" height="400">
</div> </div>
<br> <br>
@ -13,12 +13,10 @@
- [x] 上传、下载文件 - [x] 上传、下载文件
- [ ] 支持java执行环境 - [ ] 支持java执行环境
- [ ] Vector Database & Retrieval - [ ] Vector Database & Retrieval
- [ ] llama-index 兼容向量管理
- [x] task retrieval - [x] task retrieval
- [x] tool retrieval - [x] tool retrieval
- [ ] Prompt Control - [ ] Prompt Management
- [ ] prompt flow - [ ] memory Management
- [ ] 基于不同prompt管理不同任务
- [ ] Multi Agent - [ ] Multi Agent
- [ ] PRD需求文档、系分、接口设计 - [ ] PRD需求文档、系分、接口设计
- [ ] 根据需求文档、系分、接口设计生产代码 - [ ] 根据需求文档、系分、接口设计生产代码
@ -54,17 +52,21 @@
- [x] Connector - [x] Connector
- [x] 基于langchain的react模式 - [x] 基于langchain的react模式
- [x] 基于sentencebert接入Text Embedding: 向量加载速度提升 - [x] 基于sentencebert接入Text Embedding: 向量加载速度提升
Done
<br> <br>
- v0.2 - v0.2
- [ ] Prompt Control - [ ] Prompt Management
- [ ] prompt flow - [ ] memory Management
- [ ] 基于不同prompt管理不同任务
- [ ] Vector Database & Retrieval - [ ] Vector Database & Retrieval
- [ ] llama-index 兼容向量管理
DDL 2024.01.31
<br> <br>
- v0.3 - v0.3
- [x] Sandbox 环境
- [ ] 支持java执行环境
- [ ] Multi Agent - [ ] Multi Agent
- [ ] PRD需求文档、系分、接口设计 - [ ] PRD需求文档、系分、接口设计
- [ ] 根据需求文档、系分、接口设计生产代码 - [ ] 根据需求文档、系分、接口设计生产代码
@ -74,4 +76,6 @@
- [ ] Web Crawl 通用能力 - [ ] Web Crawl 通用能力
- [ ] issue document - [ ] issue document
- [ ] SDK Library Document - [ ] SDK Library Document
DDL 2024.12.31
<br> <br>

View File

@ -0,0 +1,111 @@
请自行安装 nvidia 驱动程序,本项目已在 Python 3.9.18CUDA 11.7 环境下Windows、X86 架构的 macOS 系统中完成测试。
1、python 环境准备
- 推荐采用 conda 对 python 环境进行管理(可选)
```bash
# 准备 conda 环境
conda create --name devopsgpt python=3.9
conda activate devopsgpt
```
- 安装相关依赖
```bash
cd codefuse-chatbot
# python=3.9notebook用最新即可python=3.8用notebook=6.5.6
pip install -r requirements.txt
```
2、沙盒环境准备
- windows Docker 安装:
[Docker Desktop for Windows](https://docs.docker.com/desktop/install/windows-install/) 支持 64 位版本的 Windows 10 Pro且必须开启 Hyper-V若版本为 v1903 及以上则无需开启 Hyper-V或者 64 位版本的 Windows 10 Home v1903 及以上版本。
- [【全面详细】Windows10 Docker安装详细教程](https://zhuanlan.zhihu.com/p/441965046)
- [Docker 从入门到实践](https://yeasy.gitbook.io/docker_practice/install/windows)
- [Docker Desktop requires the Server service to be enabled 处理](https://blog.csdn.net/sunhy_csdn/article/details/106526991)
- [安装wsl或者等报错提示](https://learn.microsoft.com/zh-cn/windows/wsl/install)
- Linux Docker 安装:
Linux 安装相对比较简单,请自行 baidu/google 相关安装
- Mac Docker 安装
- [Docker 从入门到实践](https://yeasy.gitbook.io/docker_practice/install/mac)
```bash
# 构建沙盒环境的镜像notebook版本问题见上述
bash docker_build.sh
```
3、模型下载可选
如需使用开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。
此处以 THUDM/chatglm2-6bm 和 text2vec-base-chinese 为例:
```
# install git-lfs
git lfs install
# install LLM-model
git lfs clone https://huggingface.co/THUDM/chatglm2-6b
cp ~/THUDM/chatglm2-6b ~/codefuse-chatbot/llm_models/
# install Embedding-model
git lfs clone https://huggingface.co/shibing624/text2vec-base-chinese
cp ~/shibing624/text2vec-base-chinese ~/codefuse-chatbot/embedding_models/
```
4、基础配置
```bash
# 修改服务启动的基础配置
cd configs
cp model_config.py.example model_config.py
cp server_config.py.example server_config.py
# model_config#11~12 若需要使用openai接口openai接口key
os.environ["OPENAI_API_KEY"] = "sk-xxx"
# 可自行替换自己需要的api_base_url
os.environ["API_BASE_URL"] = "https://api.openai.com/v1"
# vi model_config#LLM_MODEL 你需要选择的语言模型
LLM_MODEL = "gpt-3.5-turbo"
LLM_MODELs = ["gpt-3.5-turbo"]
# vi model_config#EMBEDDING_MODEL 你需要选择的私有化向量模型
EMBEDDING_ENGINE = 'model'
EMBEDDING_MODEL = "text2vec-base"
# vi model_config#embedding_model_dict 修改成你的本地路径如果能直接连接huggingface则无需修改
# 若模型地址为:
model_dir: ~/codefuse-chatbot/embedding_models/shibing624/text2vec-base-chinese
# 配置如下
"text2vec-base": "shibing624/text2vec-base-chinese",
# vi server_config#8~14, 推荐采用容器启动服务
DOCKER_SERVICE = True
# 是否采用容器沙箱
SANDBOX_DO_REMOTE = True
# 是否采用api服务来进行
NO_REMOTE_API = True
```
5、启动服务
默认只启动webui相关服务未启动fastchat可选
```bash
# 若需要支撑codellama-34b-int4模型需要给fastchat打一个补丁
# cp examples/gptq.py ~/site-packages/fastchat/modules/gptq.py
# dev_opsgpt/service/llm_api.py#258 修改为 kwargs={"gptq_wbits": 4},
# start llm-service可选
python dev_opsgpt/service/llm_api.py
```
更多LLM接入方法见[详情...](./fastchat.md)
<br>
```bash
# 完成server_config.py配置后可一键启动
cd examples
python start.py
```