Skip to content

Commit

Permalink
add comments fix web bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
limafang committed Mar 3, 2024
1 parent 63cc773 commit b709c97
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 23 deletions.
26 changes: 15 additions & 11 deletions docs/chapter2/AIAgent知识体系结构.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
comments: true
---

## 2.1 AI Agent体系介绍

### 2.1.1 什么是AI Agent:
Expand All @@ -24,9 +28,9 @@ ChatGPT接收单一查询的输入并返回输出,它一次不能完成超过

​ ○ Agents学习调用外部 API 来获取模型权重中缺失的额外信息(通常在预训练后很难更改),包括当前信息、代码执行能力、对专有信息源的访问等。

![agent](img/agent.png)

![agent](assets/images/agent.png)



​ <p align="center">图 1. LLM 驱动的自主Agents系统概述参考[LLM Powered Autonomous AgentsLilian Weng(OpenAI研究主管)](https://lilianweng.github.io/posts/2023-06-23-agent/)</p>
Expand All @@ -42,7 +46,7 @@ Baby AGI 是一个 python 脚本,它使用 OpenAI 和 Pinecone API 以及 Lang

这是通过使用 OpenAI 的自然语言处理 (NLP) 功能实现的,该功能允许系统根据目标创建新任务。它使用 Pinecone 来存储该特定任务的结果并检索上下文,并使用 LangChain 框架来处理决策过程。

![steps](img/steps.png)
![steps](assets/images/steps.png)

​ <p align="center"> 来自 https://github.com/yoheinakajima/babyagi 的图片</p>
这个过程在为智能体创建一个目标或主任务后,主要分为以下三个步骤:
Expand Down Expand Up @@ -104,7 +108,7 @@ sub_tasks = openai.ChatCompletion.create(
​ ○ 规划和反应时都会考虑主体之间的关系以及一个主体对另一个主体的观察。环境信息以树形结构呈现。

![agentarch](img/agentarch.png)
![agentarch](assets/images/agentarch.png)

<p align="center"> 图 13. 生成Agents架构。(图片来源:[Park 等人,2023](https://arxiv.org/abs/2304.03442))</p>
Expand All @@ -115,7 +119,7 @@ sub_tasks = openai.ChatCompletion.create(

微软亚洲研究院、北大、北航等机构的研究人员,通过97个回合的「苏格拉底式」严格推理,成功让GPT-4得出了「P≠NP」的结论!

![paper](img/paper.png)
![paper](assets/images/paper.png)

​ <p align="center">论文地址:https://arxiv.org/abs/2309.05689</p>

Expand All @@ -133,7 +137,7 @@ sub_tasks = openai.ChatCompletion.create(

他们引入了**五个不同的角色(比如精通概率论的数学家),作为协助证明者,根据自己擅长证明不同的部分。**

![paper2](img/paper2.png)
![paper2](assets/images/paper2.png)

简单讲,苏格拉底方法就是让我们「一步一步思考」,提出一系列问题激发批判性思维。

Expand All @@ -147,13 +151,13 @@ sub_tasks = openai.ChatCompletion.create(

通过发掘新的见解和观点,将复杂问题分解为子问题或步骤,并通过质疑回答进行自我完善。

![paper3](img/paper3.png)
![paper3](assets/images/paper3.png)

一般来说,在处理可以直接从推理中得出结论的问题时,会采用「演绎模式」(如 「让我们一步步思考」)来指导LLM直接得出结论。

对于更复杂的问题,首先要求LLM将问题转化为新问题,或分解为若干子问题。然后,通过递归方法,直到找到「原子问题」。

![pvsnp](img/pvsnp.png)
![pvsnp](assets/images/pvsnp.png)

​ <p align="center">P vs. NP问题对话转换示例</p>

Expand All @@ -167,7 +171,7 @@ sub_tasks = openai.ChatCompletion.create(

第一件事是关于系统 1 与系统 2 类型思维的概念,这个概念是由《思考,快与慢》这本书所普及的,所以这个区别是什么?这个想法是你的大脑可以以两种不同的模式运行。系统 1 思维是你的大脑的快速、本能和自动化的部分,所以例如,如果我问你 2+2 等于多少,你实际上并没有做数学计算。

![system2](img/system2.png)
![system2](assets/images/system2.png)

你只是告诉我它等于四,因为这是可用的,已经存在于你的大脑中,是本能的。但是当我告诉你 17*24 等于多少时,你并没有准备好这个答案,所以你会启动你的大脑的另一部分,这部分更加理性,更加缓慢,进行复杂的决策,感觉更有意识。你不得不在脑海中解决这个问题,然后给出答案。

Expand All @@ -177,13 +181,13 @@ sub_tasks = openai.ChatCompletion.create(

现在事实证明, LLM 目前只有系统 1。它们只有这个本能部分。它们不能思考并推理出各种可能性。它们只是按顺序输入单词,并且基本上这些语言模型有一个神经网络,可以给出下一个单词,所以它就像右边的漫画一样,你只是在跟踪轨迹,这些语言模型基本上只是不断发出声音,这就是它们按照序列采样单词的方式。每个这样的块大致需要相同的时间,所以这基本上是 LLM 在系统 1 设置中的工作方式,所以很多人认为,赋予 LLM 系统 2 的能力会给人们带来灵活的时间,让它们更深入地思考问题,反思和重新表述,然后以更有信心的答案回来,所以你可以想象将时间表示为 x 轴,某种响应的准确度表示为 y 轴,当你绘制它时,你希望它是一个单调递增的函数。

![system2two](img/system2two.png)
![system2two](assets/images/system2two.png)

今天这并不是这种情况,但很多人都在考虑这个问题,如何实际上创建一种思考的树状结构,思考问题,并反思和重新表述,然后回答时模型会更有信心,所以你可以想象将时间表示为 x 轴,某种响应的准确度表示为 y 轴,当你绘制它时,你希望它是一个单调递增的函数。今天这并不是这种情况,但很多人都在考虑这个问题。

### 2.1.4 **更多仓库以及产品:**

https://github.com/e2b-dev/awesome-ai-agents

![Aiagentlandscape](img/Aiagentlandscape.png)
![Aiagentlandscape](assets/images/Aiagentlandscape.png)

1 change: 0 additions & 1 deletion docs/chapter2/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,3 @@ comments: true

本章节内我们将详细介绍Agent的基本概念以及发展历程,帮助大家梳理知识体系的同时让大家了解到,我们将学习/实现的基本内容

```
4 changes: 4 additions & 0 deletions docs/chapter2/多智能体框架介绍.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
comments: true
---

## 2.2 **多智能体框架介绍**

### 2.2.1 **什么是MetaGPT**
Expand Down
4 changes: 4 additions & 0 deletions docs/chapter3/Agent概念概述.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
comments: true
---

## 3.1 Agent概念概述

在MetaGPT看来,我们把Agent想象成环境中的数字人,其中 Agent = 大语言模型(LLM) + 观察 + 思考 + 行动 + 记忆
Expand Down
6 changes: 5 additions & 1 deletion docs/chapter3/RoleContext对象分析.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
comments: true
---

## 3.2 RoleContext

而 Role 在与环境上下文进行交互时,是通过内部的 RoleContext 对象来实现的。本 篇我们就来看看 RoleContext 中都有哪些内容。
而 Role 在与环境上下文进行交互时,是通过内部的 RoleContext 对象来实现的。本篇我们就来看看 RoleContext 中都有哪些内容。

> 代码版本使用 v0.6.6
Expand Down
3 changes: 2 additions & 1 deletion docs/chapter3/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ comments: true

# 前期准备

本章节内我们将了解将详细了解metagpt并学习如何使用metagpt进行单智能体的开发,通过实现技术文档助手和OSS订阅智能体,进一步带大家感受metagpt的功能
本章节内我们将了解将详细了解metagpt并学习如何使用metagpt进行单智能体的开发。
通过实现技术文档助手和OSS订阅智能体,进一步带大家感受metagpt的功能。
6 changes: 5 additions & 1 deletion docs/chapter3/单智能体案例OSS-订阅智能体.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
comments: true
---

## 3.6 单智能体案例 OSS - 订阅智能体

![oss](assets/images/oss.png)
Expand Down Expand Up @@ -980,7 +984,7 @@ python main.py

- WXPusher

![wxpublisherres](/docs/chapter3//img/wxpublisherres.png)
![wxpublisherres](assets/images/wxpublisherres.png)



5 changes: 5 additions & 0 deletions docs/chapter3/实现一个单动作Agent.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
comments: true
---


## 3.3 实现一个单动作Agent

下面将带领大家利用 MetaGPT 框架实现一个生成代码的 Agent SimpleCoder 我们希 望这个Agent 能够根据我们的需求来生成代码 要自己实现一个最简单的Role,只需要重写Role 基类的 _init__act 方法 在 `_init_` 方法中,我们需要声明 Agent 的 `name`(名称)`profile`(类型)
Expand Down
5 changes: 5 additions & 0 deletions docs/chapter3/实现一个多动作Agent.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
comments: true
---


## 3.4 实现一个多动作 Agent

### 3.4.1 需求分析
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
comments: true
---

## 3.5 实现一个更复杂的 Agent:技术文档助手

在前文中我们已经介绍了如何实现一个简单的agent帮我们生成代码并执行代码,下 面我们将带领大家实现更复杂的agent,并向大家展示 MetaGPT中关于 agent的更多设计细节,现在试着想想怎么让大模型为我们写一篇技术文档?
Expand Down Expand Up @@ -273,15 +277,17 @@ def _init_actions(self, actions):
# 最后输出的样例 ['0. WriteContent', '1. WriteContent', '2. WriteContent', '3. WriteContent', '4. WriteContent', '5. WriteContent', '6. WriteContent', '7. WriteContent', '8. WriteContent']
```

首先我们根据 role 基类中定义的`_init_actions` 方法来看,当我们初始化一个动作时, 这个动作将被加入到 `self._actions` 中,而 self._actions 为一个列表,其中存储了我们 所有的动作。
首先我们根据 role 基类中定义的`_init_actions` 方法来看,当我们初始化一个动作时, 这个动作将被加入到 `self._actions` 中,而 self._actions 为一个列表,其中存储了我们 所有的动作。

1. 首先,使用 enumerate函数来同时获取操作列表中的索引 idx 和对应的操作action。
2. 然后,检查每个 action是否是 Action 类的实例。如果不是,则创建一个新的 Action 实例并赋值给变量 i。
3. 如果 action 是 Action 类的实例,会检查是否设置为人工操作(is_human)。如 果是,则会发出警告,并创建一个新的Action实例并将其赋值给变量i。
4. 调用 i 的 set_prefix 方法,该方法用于设置操作的前缀。
5. 将 i 添加到_actions 列表中。
6. 将表示操作的字符串添加到_states 列表中。

接着我们来查看Role基类中run方法的实现,当我们启动一个角色使他run时他会如 何工作
接着我们来查看Role基类中run方法的实现,当我们启动一个角色使他run时他会如何工作


如果有入参message 就将message 添加到 role 的记忆中如果没有入参就观察环境中 的新消息

Expand Down Expand Up @@ -353,12 +359,15 @@ def _set_state(self, state: int):
self.rc.todo = self.actions[self.rc.state] if state >= 0 else None
```

再来看 self_react()方法
再来看 self_react()方法

○ 先思考,然后行动,直到角色认为是时候停止并且不需要再做任何事情。
○ 这是ReAct论文中的标准思考-行动循环,在任务解决中交替进行思考和行动,即`_思考 -> _行动 -> _思考 -> _行动 -> ...`
○ 使用llm在思考过程中动态选择行动。
○ 使用llm在思考过程中动态选择行动。


函数中的`actions_taken` 变量用于跟踪已经执行的动作次数。在`while` 循环 中,函数会不断进行思考和行动,直到达到最大循环次数为止。在每次循环中,首先会调用`_think`方法,然后检查是否有待办事项。如果没有待办事项,循环将会终止。如果有待办事项,则会记录当前状态并执行相应的动作,然后增加`actions_taken` 的计数。

函数中的`actions_taken` 变量用于跟踪已经执行的动作次数。在`while` 循环 中,函数会不断进行思考和行动,直到达到最大循环次数为止。在每次循环中,首先会调用`_think`方法,然后检查是否有待办事项。如果没有待办事项,循环将会终止。如果有待办事项,则会记录当前状态并执行相应的动作,然后增加`actions_taken` 的计数。
最后,函数会返回最后一个动作的输出作为结果。

```python
Expand Down Expand Up @@ -491,11 +500,11 @@ async def _handle_directory(self, titles: Dict) -> Message:

_handle_directory(self, titles: Dict)的GPT分析

> ### 输入:{"title": "xxx", "directory": [{"dir 1": ["sub dir 1", "sub dir 2"]}]}
> **输入:{"title": "xxx", "directory": [{"dir 1": ["sub dir 1", "sub dir 2"]}]}**
>
> - `titles`字典: 包含教程的标题和目录结构。在这个例子中,标题是`"xxx"`,而目录结构是一个列表,其中包含一个字典,该字典定义了一个名为`"dir 1"`的目录,它又包含两个子目录`"sub dir 1"``"sub dir 2"`
>
> ### 函数处理流程
> **函数处理流程**
>
> 1. 记录教程标题:首先,函数从`titles`字典中提取`"title"`键的值,并将其赋值给`self.main_title`。这里,`self.main_title`将被设置为`"xxx"`
> 2. 初始化目录字符串:接着,函数创建一个名为`directory`的字符串,其初始内容是主标题(`self.main_title`),后面跟着一个换行符。
Expand All @@ -509,7 +518,7 @@ _handle_directory(self, titles: Dict)的GPT分析
> 6. 清除待办事项:将`self``.rc.``todo`设置为`None`,表示当前没有更多待处理的事项。
> 7. 返回目录信息:最后,函数返回一个`Message`对象,其内容是经过格式化的目录字符串`directory`
>
> ### 例子输出
> **例子输出**
>
> 以输入`{"title": "xxx", "directory": [{"dir 1": ["sub dir 1", "sub dir 2"]}]}`为例,函数输出的`Message`对象的内容将会是:
>
Expand Down
4 changes: 4 additions & 0 deletions docs/chapter3/智能体开发作业.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
comments: true
---

## 3.7 智能体开发作业

#### 基础作业
Expand Down

0 comments on commit b709c97

Please sign in to comment.