架构简析| AutoGPT

AutoGPT核心代码分析

核心流程图(如何与插件、ai、人、历史数据进行交互)

No
Yes
入口
AI目标/资源/限制等信息的文本
长记忆数据库
组合多种来源生成prompt
全量消息历史
发送prompt给ChatGPT并获取回复
检查计划是否合理
执行计划

AI目标/资源/限制等信息的文本

在AutoGPT第一次发送消息给ai时,“长记忆数据库”和“执行结果列表”都为空,只有“AI目标/资源/限制等信息的文本”作为prompt发送给ChatGPT。例子文本如下(部分翻译),此prompt告诉ChatGPT目标、限制、命令、资源、回复格式。在网页版的ChatGPT窗口粘贴此文本,也可以得到预期的回复。

您是AI助手,如何使用LangChain? 
您的决策必须始终独立进行,无需寻求用户帮助。发挥您作为LLM的优势,追求没有法律纠纷的简单策略。

GOALS:
1. 告诉我LangChain如何使用.
2. 帮我安装LangChain.
3. 告诉我一些可以直接在我电脑上运行LangChain的例子.
4. 所有回复用中文


Constraints:
1.  短期记忆的词汇限制约为4000词。您的短期记忆能力较弱,因此请立即将重要信息保存到文件中。
2.  如果您不确定之前如何做某事或想回忆过去的事件,思考类似的事件将有助于您记住。
3.  不允许用户协助
4.  仅使用双引号内列出的命令,例如"command name"

Commands:
1. analyze_code: Analyze Code, args: "code": ""
2. execute_python_file: Execute Python File, args: "filename": ""
3. append_to_file: Append to file, args: "filename": "", "text": ""
4. delete_file: Delete file, args: "filename": ""
5. read_file: Read file, args: "filename": ""
6. search_files: Search Files, args: "directory": ""
7. write_to_file: Write to file, args: "filename": "", "text": ""
8. google: Google Search, args: "query": ""
9. improve_code: Get Improved Code, args: "suggestions": "", "code": ""
10. send_tweet: Send Tweet, args: "tweet_text": ""
11. browse_website: Browse Website, args: "url": "", "question": ""
12. write_tests: Write Tests, args: "code": "", "focus": ""
13. delete_agent: Delete GPT Agent, args: "key": ""
14. get_hyperlinks: Get text summary, args: "url": ""
15. get_text_summary: Get text summary, args: "url": "", "question": ""
16. list_agents: List GPT Agents, args: () -> str
17. message_agent: Message GPT Agent, args: "key": "", "message": ""
18. start_agent: Start GPT Agent, args: "name": "", "task": "", "prompt": ""
19. Task Complete (Shutdown): "task_complete", args: "reason": ""

Resources:
1.  用于搜索和信息收集的互联网访问。
2.  长期记忆管理。
3.  GPT-3.5驱动的代理用于委派简单任务。
4.  文件输出。

Performance Evaluation:
1.  持续审查和分析您的行为,以确保您充分发挥自己的能力。
2.  不断地对自己的大局观行为进行建设性的自我批评。
3.  反思过去的决策和策略,以优化您的方法。
4.  每个命令都有成本,因此要聪明且高效。力求以最少的步骤完成任务。
5.  将所有代码写入文件。

您应该只按照下面所述的方式以JSON格式回复
响应格式: 
{
    "thoughts": {
        "text": "thought",
        "reasoning": "reasoning",
        "plan": "- short bulleted\n- list that conveys\n- long-term plan",
        "criticism": "constructive self-criticism",
        "speak": "thoughts summary to say to user"
    },
    "command": {
        "name": "command name",
        "args": {
            "arg name": "value"
        }
    }
} 
确保响应可以被Python的json.loads解析

组合多种来源生成prompt

在AutoGPT刚启动时,全量历史消息和长记忆数据数据库都为空,那么发送给ChatGPT就是上文列出的初始prompt。之后的运行过程中,全量历史消息和长记忆数据数据库会被更新。ChatGPT会组合长记忆数据库、全量消息历史、AI目标/资源/限制等信息的文本,三个来源,创建新的prompt。

来源 何时更新 如何保存 如何读取
全量消息历史 ChatGPT返回值和Commands返回值等 List 获取最新5个
长记忆数据库 Commands函数可能会写入 文本、数据库等 ada embedding最相似内容
AI目标/资源/限制等信息的文本 启动时创建,之后不再更新 变量
以上三个来源组合成system message,并添加下面的文本为user message:
确定要使用哪个下一个Commands,并使用上述格式进行响应:"

可以理解为以多种来源的信息作为历史记录,指定模型生成下一个命令

发送prompt给ChatGPT并获取回复

这部分比较简单,使用OpenAI提供的API完成,核心代码如下:

response = openai.ChatCompletion.create(  
    model=model,  # 模型名字,如“GPT4”
    messages=messages,  # list
    temperature=temperature, # 浮点,控制模型的“想象力” 
    max_tokens=max_tokens,  # 最大tonken数量
    api_key=openai_api_key,  
)

检查计划是否合理

下面是一个ChatGPT回复的例子。ChatGPT总是回复文本,把文本转化为json对象后,可以从“command”里得到需要执行的计划。本例中,计划是google搜索“LangChain如何使用”。

{
    "thoughts":{
        "text":"开始回答关于LangChain的问题并提供帮助",
        "reasoning":"用户想要了解LangChain的使用方法并获取安装帮助",
        "plan":"- 查找LangChain的使用方法\n- 提供LangChain的安装步骤\n- 找到在电脑上运行LangChain的例子",
        "criticism":"我需要确保找到的信息是准确的,并且能够满足用户的需求",
        "speak":"好的,我将帮助您了解如何使用LangChain,为您提供安装步骤并找到可以在您的电脑上运行的例子。"
    },
    "command":{
        "name":"google",
        "args":{
            "query":"LangChain如何使用"
        }
    }
}

用户可以选择1. 跳过此步骤 2.人工判断计划是否合理 3.用ChatGPT判断计划是否合理。如果用ChatGPT,则用从上面json中提取"plan""criticism"重新给ChatGPT,让它判断这个计划是否合理。ChatGPT回复例子如下:

Thought: 用户想要了解LangChain的使用方法并获取安装帮助。
Reasoning: 用户需要了解如何使用LangChain并在他们的电脑上安装它,以便能够开始使用它。
Plan: 1. 查找LangChain的使用方法 2. 提供LangChain的安装步骤 3. 找到在电脑上运行LangChain的例子。
Criticism: 该计划似乎很全面,但没有提供如何确保信息的准确性和如何满足用户的需求。

Y 该计划是有效的,因为它提供了用户所需的信息,并且包括了查找使用方法、提供安装步骤和找到运行例子的步骤。然而,为了确保信息的准确性和满足用户的需求,我们可以建议在提供信息之前进行测试和验证,并在提供信息后提供支持和反馈机制。

执行计划

AutoGPT使用命令模式,保存所有可以执行的命令。从AI目标/资源/限制等信息的文本里的Commands可以看到所有支持的命令。本例子中,根据ChatGPT的回复,调用google函数,参数为"LangChain如何使用",下面为此函数的回复:

Command google returned: [
    {
        "title": "Quickstart Guide —  LangChain 0.0.155",
        "href": "https://python.langchain.com/en/latest/getting_started/getting_started.html",
        "body": "LangChain provides many modules that can be used to build language model applications. Modules can be combined to create more complex applications, or be used individually for simple applications. LLMs: Get predictions from a language model# The most basic building block of LangChain is calling an LLM on some input. Let's walk through a ..."
    },
    {
        "title": "Welcome to LangChain —  LangChain 0.0.154",
        "href": "https://python.langchain.com/en/latest/index.html",
        "body": "Welcome to LangChain. #. LangChain is a framework for developing applications powered by language models. We believe that the most powerful and differentiated applications will not only call out to a language model via an API, but will also: Be data-aware: connect a language model to other sources of data. Be agentic: allow a language model to ..."
    },
    {
        "title": "️ LangChain | ️ LangChain",
        "href": "https://docs.langchain.com/docs/",
        "body": "LangChain is a framework for developing applications powered by language models. We believe that the most powerful and differentiated applications will not only call out to a language model via an api, but will also: Be data-aware: connect a language model to other sources of data. Be agentic: Allow a language model to interact with its ..."
    },
]

你可能感兴趣的:(chatgpt)