Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
An open-source chatgpt tool ecosystem where you can combine tools with chatgpt and use natural language to do anything.
给ChatGPT装上手和脚,拿起工具提高你的生产力
简体中文 | English
大语言模型涌现能力让人惊艳,ChatGPT出现给NLP技术带来革命,除此之外还让我意识到一种新的人机交互的可能性
这是一个能让ChatGPT使用多个神奇工具的执行引擎,你能用自然语言命令ChatGPT使用联网、搜索、数学运算、控制电脑、执行代码等工具,扩大ChatGPT使用范围提高你的生产力。
本项目因关注到ChatGPT开放插件而诞生,该插件定制性较差,且生态封闭,这不是一个好的趋势,我相信未来国内LLM一定百花齐放,同时我从ChatGPT看到了使用工具的可行性,和潜在价值,因此我希望做一个能兼容未来LLM的工具生态。
如果把ChatGPT的插件比作Apple的App Store,那么这个项目最终形态就是Android OS的开放式生态,简称LLM-OS。在这个生态里所有工具组成一个操作系统,用户仅需输入或传述文字即可做任何事情。
鉴于目前状况,本项目的定位是:一个开源的ChatGPT工具生态系统,您可以将工具与ChatGPT结合使用,使用自然语言来完成任何事情。
git clone https://github.com/goldfishh/chatgpt-tool-hub.git
cd chatgpt-tool-hub
pip3 install -r requirements.txt
.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
// 需要额外申请api-key的工具,在这里填入
}
}
需要额外申请工具config.json配置示例见:工具申请方法与配置说明
python3 terminal_io.py
使用本方法,你将可以用微信作为前端更方便地使用tool-hub
本项目已发布到PyPI上,你只需使用pip命令即可安装
pip install -i https://pypi.python.org/simple chatgpt-tool-hub
import os
from chatgpt_tool_hub.apps import AppFactory
os.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)
如果有需求,我会更新更详细接入的文档,欢迎提issue
工具引擎的实现原理本质是Chain-of-Thought:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
我将通过用6个自问自答的问题解释chatgpt-tool-hub的工作原理
事务型工具是在你本地运行的,事务型工具本质是一个python编写的函数,terminal、python、url-get工具分别用到了封装调用subprocess库、python解释器和requests库的函数
借助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前缀的内容往往是使用事务型工具的用户想知道的答案
ChatGPT微调时进行大量Q&A、CoT预料的学习和RLHF调优,目前ChatGPT对于工具和内容生成的质量是有保证的
但是目前不是100%,因为会有低质量prompt或者不合适工具的输入,这些问题在工具引擎会进行鲁棒性的处理来保证生成内容的稳定性
我创建一个issue,可以方便大家来获取和分享使用tool过程解决的有趣问题和思路、每个tool使用时prompt技巧、遇到问题的处理办法: 更好的使用tool的技巧交流
当事务函数处理完成返回结果后,默认不会直接返回给用户,而是根据结果内容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 chinese
ChatGPT使用工具过程并不顺利:当遇到迭代次数到达预设值时,会根据历史过程,返回给用户最后结果
是的,当你用事务性工具时,你就给予了ChatGPT在你本地运行程序的权利,你需要权限限制来规避可能的风险
如果无法信任ChatGPT主导你的机器,请不要使用
参考ChatGPT 官方插件,非事务性工具也称为插件型工具,该工具可视为开放性的ChatGPT插件
[✓] 结果可解释性输出 -> LLM-OS的内心独白
[✓] 一个前端demo -> LLM-OS
[✓] 长文本场景 -> summary工具
[✓] 长工具顺序控制 -> 实现了toolintool机制
[✓] 粒度配置 -> 每个tool封装的LLM可独立配置
[○] tokens计算,精确管理
[○] gpt_index长文本(pdf、html)检索
[○] 接口并发支持
[○] 接入国内LLM
[○] 兼容不使用tool的场景
[○] 互斥tool控制
[○] subtree 动态注册&反注册
[○] 工具中断
[○] 定时调度
[○] 语音输入、输出
[○] stable-diffusion 中文prompt翻译
[✓] ImageCaptioning
[○] 小米智能家居控制
[○] 支持ChatGPT官方插件
[○] 让LLM来实现tool
[○] 支持图片处理工具
[○] 支持视频处理工具
[✗] Wechat
目前工具分为两类:事务型工具、插件型工具
我将很快更新这部分内容
感谢以下项目对本项目提供的有力支持:
受langchain的启发,本项目重写了langchain v0.0.123 工具有关的实现
启发了browser tool跨平台的实现、tool engine的json通信、部分prompt描述
llm-os demo 改写自该项目
FAQs
An open-source chatgpt tool ecosystem where you can combine tools with chatgpt and use natural language to do anything.
We found that chatgpt-tool-hub demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.