Package: wqj-chatgpt-tool-hub
chatgpt-tool-hub / ChatGPT工具引擎给ChatGPT装上手和脚，拿起工具提高你的生产力简体中文 |English大语言模型涌现能力让人惊艳，ChatGPT出现给NLP技术带来革命，除此之外还让我意识到一种新的人机交互的可能性🌱 5.4 LLM-OS demo在线演示更新日志|Q&A简介这是一个能让ChatGPT使用多个神奇工具的执行引擎，你能用自然语言命令ChatGPT使用联网、搜索、数学运算、控制电脑、执行代码等工具，扩大ChatGPT使用范围提高你的生产力。本项目因关注到ChatGPT开放插件而诞生，该插件定制性较差，且生态封闭，这不是一个好的趋势，我相信未来国内LLM一定百花齐放，同时我从ChatGPT看到了使用工具的可行性，和潜在价值，因此我希望做一个能兼容未来LLM的工具生态。如果把ChatGPT的插件比作Apple的App Store，那么这个项目最终形态就是Android OS的开放式生态，简称LLM-OS。在这个生态里所有工具组成一个操作系统，用户仅需输入或传述文字即可做任何事情。鉴于目前状况，本项目的定位是：一个开源的ChatGPT工具生态系统，您可以将工具与ChatGPT结合使用，使用自然语言来完成任何事情。特性1. 可在 LLM-OS demo 单独使用tool-hub2. tool-hub以插件形式为chatgpt-on-wechat提供工具能力. 详见 (tool插件使用教程)3. 支持中、英文互动4. 支持上下文记忆5. 支持proxy6. 支持大量工具工具指南 快速更新中7. 支持多种工具同时且自动调用、树状编排工具⛳ 看看tool-hub未来计划更新的特性：tool-hub todo-list📭 去issues提提建议✈️ 快速开始1.  LLM-OS demo(1). 克隆仓库gitclonehttps://github.com/goldfishh/chatgpt-tool-hub.gitcdchatgpt-tool-hub(2). 使用pip安装本项目依赖pip3install-rrequirements.txt(3). 重命名.env.template 和 config.json.template文件，去掉.template后缀 打开文件填入配置参数.env用于配置全局参数 文件配置示例LLM_API_KEY=sk-xx          // 必填，你的OPENAI API Key, 如何申请请见Q&A
MODEL_NAME=gpt-3.5-turbo      // 选填，OPENAI LLM模型
THINK_DEPTH=3                 // 选填，默认为3，控制LLM-OS的最大调用工具次数，过大不一定能提高回复质量
REQUEST_TIMEOUT=90            // 选填，默认120，等待openai api回复的最大时间
PROXY=http://192.168.7.1:7890 // 选填，当你需要代理访问openai时可填
DEBUG=false                   // 选填，debug模式config.json用于配置工具参数 文件配置示例{"tools":[],// 填入你想用到的额外工具名"kwargs":{"no_default":false,// 是否不使用默认工具, 默认使用python, terminal, url-get, meteo-weather"top_k_results":2,// 控制部分搜索工具(如arxiv、wikipedia)返回只前k条记录, 不建议过多// 需要额外申请api-key的工具，在这里填入}}需要额外申请工具config.json配置示例见：工具申请方法与配置说明(4). 执行terminal_io.pypython3terminal_io.py(5). 进入LLM-OS后你可以自行探索 或者进一步浏览详细教程：LLM_OS demo使用说明2. 我给chatgpt-on-wechat开发了tool插件使用本方法，你将可以用微信作为前端更方便地使用tool-hub查阅chatgpt-on-wechat文档中的项目简介和快速开始Note: 你需要安装拓展依赖才能使用tool插件tool插件教程3. 你是其他项目开发者，想要接入本工具引擎本项目已发布到PyPI上，你只需使用pip命令即可安装(1). 安装chatgpt-tool-hub包pipinstall-ihttps://pypi.python.org/simplechatgpt-tool-hub(2). 快速开始importosfromchatgpt_tool_hub.appsimportAppFactoryos.environ["LLM_API_KEY"]="YOUR_LLM_API_KEY"# 必填os.environ["PROXY"]="YOUR_PROXY_ADDRESS"# 选填app=AppFactory().create_app(tools_list=[],**{})reply=app.ask("YOUR_QUESTION_TO_HERE")print(reply)(3). 以插件形式接入tool-hub可参考tool插件实现tool.py如果有需求，我会更新更详细接入的文档，欢迎提issue工具指南🚀工具指南 工具快速开发中原理工具引擎的实现原理本质是Chain-of-Thought：Chain-of-Thought Prompting Elicits Reasoning in Large Language Models我将通过用6个自问自答的问题解释chatgpt-tool-hub的工作原理1. 事务型工具（如terminal、python）是在哪运行，以及如何执行的事务型工具是在你本地运行的，事务型工具本质是一个python编写的函数，terminal、python、url-get工具分别用到了封装调用subprocess库、python解释器和requests库的函数2. ChatGPT是如何触发调用这些函数借助ChatGPT api提供的temperature参数，该参数越低，ChatGPT输出的结果会更集中和确定，当temperature为0时，相同的问题会得到统一回答我在prompt构建时会提供给ChatGPT此时用到的工具列表信息，每个工具信息包含：工具名 和 工具描述：TOOLS:  
------  
  
You have access to the following tools:  

> Python REPL: A Python shell. Use this to execute python commands. 
> url-get: A portal to the internet. Use this when you need to get specific content from a website. 
> Terminal: Executes commands in a terminal. 
> Bing Search: A wrapper around Bing Search. Useful for when you need to answer questions about current events.有了工具prompt，这时ChatGPT就能理解这些工具名字和使用场景，调用事务函数还需要进一步细化我和ChatGPT之间的通信协议（仍是通过prompt）：
通信协议限制ChatGPT使用工具时返回内容的格式，只能返回三种前缀的内容：1. Thought: Do I need to use a tool? Yes or No
2. Action: 工具名字
3. Action Input: 工具的输入通信协议完整prompt：To use a tool, please use the following format:


Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [Python REPL, url-get, Terminal, Bing Search]
Action Input: the input to the action
Observation: the result of the action此时，工具引擎有专用的文本解析模块负责解析这些内容，当解析成功后，将调度到具体事务函数执行，然后返回固定前缀的结果：Observation: 当事务函数执行完成返回时的内容带Observation前缀的内容往往是使用事务型工具的用户想知道的答案3. ChatGPT怎么知道该用的工具和输入，是否每次都严格按照prompt生成格式化内容ChatGPT微调时进行大量Q&A、CoT预料的学习和RLHF调优，目前ChatGPT对于工具和内容生成的质量是有保证的但是目前不是100%，因为会有低质量prompt或者不合适工具的输入，这些问题在工具引擎会进行鲁棒性的处理来保证生成内容的稳定性我创建一个issue，可以方便大家来获取和分享使用tool过程解决的有趣问题和思路、每个tool使用时prompt技巧、遇到问题的处理办法：更好的使用tool的技巧交流4. 如果需要多个工具交替配合解决某个问题，引擎是怎么做的？当事务函数处理完成返回结果后，默认不会直接返回给用户，而是根据结果内容CoT，在整个prompt中，还有两个子prompt负责用户对话历史记录和中间结果用户对话历史记录：Human: A question
AI: A answer
......中间结果：Thought: Do I need to use a tool? Yes
Action: Wolfram Alpha
Action Input: gdp china vs. usa
Observation: China\nUnited States | GDP | nominal \nAnswer: China | $14.72 trillion per year\nUnited States | $20.95 trillion per year\n(2020 estimates)
Thought:每轮工具CoT过程均会作为下次推理判断工具的依据，由此迭代地进行工具判断、执行，最后当识别到特定前缀时，CoT结果将返回给用户CoT结束prompt：When you have a response to say to the Human, or if you do not need to use a tool, you MUST use the format:

Thought: Do I need to use a tool? No
AI: the response to the original input question in chineseChatGPT使用工具过程并不顺利：当遇到迭代次数到达预设值时，会根据历史过程，返回给用户最后结果5. 事务性工具交给ChatGPT是否具有不可预料的危险性？是的，当你用事务性工具时，你就给予了ChatGPT在你本地运行程序的权利，你需要权限限制来规避可能的风险如果无法信任ChatGPT主导你的机器，请不要使用6. 非事务型工具的实现原理是什么参考ChatGPT 官方插件，非事务性工具也称为插件型工具，该工具可视为开放性的ChatGPT插件🎯 计划feature todolist[✓] 结果可解释性输出 -> LLM-OS的内心独白[✓] 一个前端demo  -> LLM-OS[✓] 长文本场景 -> summary工具[✓] 长工具顺序控制 -> 实现了toolintool机制[✓] 粒度配置 -> 每个tool封装的LLM可独立配置[○] tokens计算，精确管理[○] gpt_index长文本(pdf、html)检索[○] 接口并发支持[○] 接入国内LLM[○] 兼容不使用tool的场景[○] 互斥tool控制[○] subtree 动态注册&反注册[○] 工具中断[○] 定时调度[○] 语音输入、输出tool todolist[○] stable-diffusion 中文prompt翻译[✓] ImageCaptioning[○] 小米智能家居控制[○] 支持ChatGPT官方插件[○] 让LLM来实现tool[○] 支持图片处理工具[○] 支持视频处理工具[✗] Wechat工具开发指南目前工具分为两类：事务型工具、插件型工具工具开发教程背景我将很快更新这部分内容☕ 宣传如果你想支持本项目，欢迎给项目点个star、提issue和pr如果你想进一步支持项目作者少掉头发，努力开发，可以给和我一起开发项目的伙伴 或 单独给我来杯 ☕感谢感谢以下项目对本项目提供的有力支持：1.langchain受langchain的启发，本项目重写了langchain v0.0.123 工具有关的实现2.Auto-GPT启发了browser tool跨平台的实现、tool engine的json通信、部分prompt描述3.chatgpt-in-terminalllm-os demo 改写自该项目