在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解析
在AutoGPT刚启动时,全量历史消息和长记忆数据数据库都为空,那么发送给ChatGPT就是上文列出的初始prompt。之后的运行过程中,全量历史消息和长记忆数据数据库会被更新。ChatGPT会组合长记忆数据库、全量消息历史、AI目标/资源/限制等信息的文本,三个来源,创建新的prompt。
来源 | 何时更新 | 如何保存 | 如何读取 |
---|---|---|---|
全量消息历史 | ChatGPT返回值和Commands返回值等 | List | 获取最新5个 |
长记忆数据库 | Commands函数可能会写入 | 文本、数据库等 | ada embedding最相似内容 |
AI目标/资源/限制等信息的文本 | 启动时创建,之后不再更新 | 变量 | |
以上三个来源组合成system message,并添加下面的文本为user message: |
确定要使用哪个下一个Commands,并使用上述格式进行响应:"
可以理解为以多种来源的信息作为历史记录,指定模型生成下一个命令
这部分比较简单,使用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 ..."
},
]