diff --git a/README.md b/README.md index fe9b2fd..7c4d391 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ DevOps-ChatBot是由蚂蚁CodeFuse团队开发的开源AI智能助手,致力 💡 本项目旨在通过检索增强生成(Retrieval Augmented Generation,RAG)、工具学习(Tool Learning)和沙盒环境来构建软件开发全生命周期的AI智能助手,涵盖设计、编码、测试、部署和运维等阶段。 逐渐从各处资料查询、独立分散平台操作的传统开发运维模式转变到大模型问答的智能化开发运维模式,改变人们的开发运维习惯。 本项目核心差异技术、功能点: -- **🧠 智能调度核心:** 构建了体系链路完善的调度核心,支持多模式一键配置,简化操作流程。 +- **🧠 智能调度核心:** 构建了体系链路完善的调度核心,支持多模式一键配置,简化操作流程。 [使用说明](sources/readme_docs/multi-agent.md) - **💻 代码整库分析:** 实现了仓库级的代码深入理解,以及项目文件级的代码编写与生成,提升了开发效率。 - **📄 文档分析增强:** 融合了文档知识库与知识图谱,通过检索和推理增强,为文档分析提供了更深层次的支持。 - **🔧 垂类专属知识:** 为DevOps领域定制的专属知识库,支持垂类知识库的自助一键构建,便捷实用。 @@ -94,6 +94,8 @@ DevOps-ChatBot是由蚂蚁CodeFuse团队开发的开源AI智能助手,致力 请自行安装 nvidia 驱动程序,本项目已在 Python 3.9.18,CUDA 11.7 环境下,Windows、X86 架构的 macOS 系统中完成测试。 +Docker安装、私有化LLM接入及相关启动问题见:[快速使用明细](sources/readme_docs/start.md) + 1、python 环境准备 - 推荐采用 conda 对 python 环境进行管理(可选) @@ -110,45 +112,7 @@ cd codefuse-chatbot 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 - -# install Embedding-model -git lfs clone https://huggingface.co/shibing624/text2vec-base-chinese -cp ~/shibing624/text2vec-base-chinese ~/codefuse-chatbot/embedding_models/ -``` - - -4、基础配置 +2、基础配置 ```bash # 修改服务启动的基础配置 @@ -161,13 +125,18 @@ os.environ["OPENAI_API_KEY"] = "sk-xxx" # 可自行替换自己需要的api_base_url 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_MODELs = ["gpt-3.5-turbo"] -# vi model_config#43 你需要选择的向量模型 +# vi model_config#EMBEDDING_MODEL 你需要选择的私有化向量模型 +EMBEDDING_ENGINE = 'model' 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", # vi server_config#8~14, 推荐采用容器启动服务 @@ -178,7 +147,7 @@ SANDBOX_DO_REMOTE = True NO_REMOTE_API = True ``` -5、启动服务 +3、启动服务 默认只启动webui相关服务,未启动fastchat(可选)。 ```bash @@ -189,9 +158,11 @@ NO_REMOTE_API = True # start llm-service(可选) python dev_opsgpt/service/llm_api.py ``` +更多LLM接入方法见[详情...](sources/readme_docs/fastchat.md) +
```bash -# 配置好server_config.py后,可一键启动 +# 完成server_config.py配置后,可一键启动 cd examples python start.py ``` diff --git a/sources/docs_imgs/agent-flow.png b/sources/docs_imgs/agent-flow.png new file mode 100644 index 0000000..2358cc8 Binary files /dev/null and b/sources/docs_imgs/agent-flow.png differ diff --git a/sources/docs_imgs/luban.png b/sources/docs_imgs/luban.png new file mode 100644 index 0000000..9cf8576 Binary files /dev/null and b/sources/docs_imgs/luban.png differ diff --git a/sources/readme_docs/multi-agent.md b/sources/readme_docs/multi-agent.md new file mode 100644 index 0000000..f6f3c81 --- /dev/null +++ b/sources/readme_docs/multi-agent.md @@ -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)等。 + +
+ 图片 +
+ +以下模块将从5个方面介绍Multi Agent框架所需要素: +- Agent Communication在Multi Agent框架中,确保Agent可以有效地进行信息交流对于管理上下文以及提高问答效率至关重要。 + a. 遵循简洁直观易于理解的链式对话原则,将Agent以线性方式排列串连成一个执行链路。 + b. 借鉴metaGPT中的Message Pool框架,允许Agent对Message Pool进行推送和订阅,使链路更加灵活。有利于精细化Prompt工程的场景,但难以把握复杂链路的关系分析。 +- Standard Operation Process(SOP):对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 Management:Multi-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 Chain(CEO)、Product Arguement Chain(CPO、CFO、CTO)、Engineer Group Chain(Selector、Developer1~N)、QA Engineer Chain(Developer、Tester)、Deploy Chain(Developer、Deploer)。 + + + +## 模块介绍 +为了便于大家理解整个Multi-Agent的链路,我们采取 Flow 的形式来详细介绍如何通过配置构建 + +
+ 图片 +
+ + +
下面,我们先介绍相关的模块
+ +### 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 |Enum:BaseAgent、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| Enum:BaseChain 也可以继承以上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 |Enum:BasePhase 也可以继承以上Phase,自定义构造相关的Phase| +|chains |List[String] |phase当中存在的chain以及chain的执行顺序| +|do_doc_retrieval |bool |在场景执行开始判断是否需要补充额外信息| +|do_code_retrieval| bool |在场景执行开始判断是否需要补充额外信息| +|do_tool_retrieval |bool |在场景执行开始判断是否需要补充额外信息| + + +## 快速使用 +Comming soon \ No newline at end of file diff --git a/sources/readme_docs/roadmap.md b/sources/readme_docs/roadmap.md index d952112..3dae2f9 100644 --- a/sources/readme_docs/roadmap.md +++ b/sources/readme_docs/roadmap.md @@ -2,7 +2,7 @@ ## RoadMap
- 图片 + 图片

@@ -13,12 +13,10 @@ - [x] 上传、下载文件 - [ ] 支持java执行环境 - [ ] Vector Database & Retrieval - - [ ] llama-index 兼容向量管理 - [x] task retrieval - [x] tool retrieval -- [ ] Prompt Control - - [ ] prompt flow - - [ ] 基于不同prompt管理不同任务 +- [ ] Prompt Management +- [ ] memory Management - [ ] Multi Agent - [ ] PRD需求文档、系分、接口设计 - [ ] 根据需求文档、系分、接口设计生产代码 @@ -54,17 +52,21 @@ - [x] Connector - [x] 基于langchain的react模式 - [x] 基于sentencebert接入Text Embedding: 向量加载速度提升 + +Done
- v0.2 -- [ ] Prompt Control - - [ ] prompt flow - - [ ] 基于不同prompt管理不同任务 +- [ ] Prompt Management +- [ ] memory Management - [ ] Vector Database & Retrieval - - [ ] llama-index 兼容向量管理 + +DDL: 2024.01.31
- v0.3 +- [x] Sandbox 环境 + - [ ] 支持java执行环境 - [ ] Multi Agent - [ ] PRD需求文档、系分、接口设计 - [ ] 根据需求文档、系分、接口设计生产代码 @@ -74,4 +76,6 @@ - [ ] Web Crawl 通用能力 - [ ] issue document - [ ] SDK Library Document + +DDL: 2024.12.31
\ No newline at end of file diff --git a/sources/readme_docs/start.md b/sources/readme_docs/start.md new file mode 100644 index 0000000..6738faf --- /dev/null +++ b/sources/readme_docs/start.md @@ -0,0 +1,111 @@ +请自行安装 nvidia 驱动程序,本项目已在 Python 3.9.18,CUDA 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.9,notebook用最新即可,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) +
+ +```bash +# 完成server_config.py配置后,可一键启动 +cd examples +python start.py +``` \ No newline at end of file