车厢
网站 | 博客 | 文档
车厢是一颗宝石,它使您能够利用各种概念(如LLMs(OpenAI、Anthropic、Gpt4all)、搜索、SQL(支持Sequel和Active Record)、Rails Active Record、向量搜索等)创建新的AI组合系统。这甚至可以扩展到您的概念(包括您的概念)中。
这颗宝石的灵感来自流行的Python库Langchain。但是,我们想赋予它Ruby的色彩,并使其更适合初学者上手。
概念
所有这些概念都在一个名为Boxcars的模块中:
- Boxcar - 一个执行有趣事件的封装(比如搜索、数学、SQL、Active Record查询或服务的API调用)。一个Boxcar可以使用一个引擎(如下面描述),如果没有指定但需要,则使用默认引擎
Boxcars.engine
。 - Train - 给定一个Boxcar列表和可选的引擎,Train将问题分解成小块,以便单个Boxcar解决。然后将各个结果组合起来,直到找到最终答案。目前,ZeroShot是Train的唯一实现(但我们很快会添加更多),当你想构建一个Train时,你可以直接构造它或使用
Boxcars::train
。 - Prompt - 由引擎用来生成文本结果。我们的Boxcar内置了提示,但如果你愿意,可以更改或增加它们。
- Engine - 一个从提示生成文本的实体。如果没有其他指定的引擎,OpenAI的LLM文本生成器是默认引擎,你可以覆盖默认引擎(
Boxcar.configuration.default_engine
)。我们有一个用于Anthropic的Claude API的引擎,名为Boxcars::Anthropic
,还有一个用于GPT的引擎,名为Boxcars::Gpt4allEng
。 - VectorStore - 一个存储和查询向量的地方。
安全
目前,我们的系统是为已经拥有其项目管理权限的个人设计的。很有可能通过操纵系统的提示来执行恶意操作,但如果你已经拥有管理访问权限,则不需要车厢来执行这些操作。
注意: 我们正在积极寻求改进我们系统以识别和防止任何恶意尝试的方法。如果你有任何建议或推荐,请随时通过找到现有问题或创建一个新问题并提供反馈来与我们分享。
安装
将此行添加到您的应用程序的Gemfile中:
gem 'boxcars'
然后执行:
$ bundle install
或自行安装:
$ gem install boxcars
用法
我们将很快添加更多示例,但这里有几个入门示例。首先,设置用于OpenAI、Anthropic和Google SERP(OPENAI_ACCESS_TOKEN, ANTHROPIC_API_KEY, SERPAPI_API_KEY)等服务的环境变量。如果你不想在环境中设置这些变量,可以将它们直接传递给API。
在下面的示例中,我们在第一行添加了一个Ruby gem以加载环境,但是具体取决于您的需求,您可能不需要它。
require "dotenv/load"
require "boxcars"
注意:如果你想尝试下面的示例,请运行此命令,然后粘贴感兴趣的代码片段:
irb -r dotenv/load -r boxcars
# 或者如果你喜欢本地存储库
irb -r dotenv/load -r ./lib/boxcars
直接使用Boxcar
# 运行计算器
engine = Boxcars::Openai.new(max_tokens: 256)
calc = Boxcars::Calculator.new(engine: engine)
puts calc.run "什么是pi的四次方除以22.1?"
输出:
> 进入Calculator#run
什么是pi的四次方除以22.1?
RubyREPL: puts (Math::PI**4)/22.1
答案: 4.407651178009159
{"status":"ok","answer":"4.407651178009159","explanation":"答案: 4.407651178009159","code":"puts (Math::PI**4)/22.1"}
< 退出Calculator#run
4.407651178009159
注意,由于Openai目前是最常用的引擎,如果你没有传入引擎,它将默认使用。所以,这是上述脚本的等效简短版本:
# 运行计算器
calc = Boxcars::Calculator.new # 只使用默认引擎
puts calc.run "什么是pi的四次方除以22.1?"
你可以用Boxcars::configuration.default_engine = NewDefaultEngine
更改默认引擎。
目前实现的Boxcars
以下是我们目前拥有的,请提交PR来分享你的新想法。
- GoogleSearch: 使用SERP API进行搜索
- WikipediaSearch: 使用Wikipedia API进行搜索
- Calculator: 使用引擎生成ruby代码进行数学运算
- SQL: 给定一个ActiveRecord连接,它将从提示生成和运行sql语句。
- ActiveRecord: 给定一个ActiveRecord连接,它将从提示生成和运行ActiveRecord语句。
- Swagger: 给予一个Swagger Open API文件(YAML或JSON),回答关于或运行引用服务的问题。参见此处的示例。
运行一组Boxcars
# 用默认引擎运行一个计算器和搜索
boxcars = [Boxcars::Calculator.new, Boxcars::GoogleSearch.new]
train = Boxcars.train.new(boxcars: boxcars)
train.run "Pi乘以德州奥斯汀一月平均气温的平方根是多少?"
输出:
> 进入Zero Shot#run
Pi乘以德州奥斯汀一月平均气温的平方根是多少?
思考: 我们需要找到德州奥斯汀一月的平均气温,然后乘以pi和平均气温的平方根。我们可以使用搜索引擎查找德州奥斯汀一月的平均气温,然后使用计算器进行乘法运算。
问题: 德州奥斯汀一月的平均气温是多少
答案: 德州奥斯汀美国一月的天气。每日高温增加2°F,从62°F到64°F,极少低于45°F或高于76° ...
观察: 德州奥斯汀美国一月的天气。每日高温增加2°F,从62°F到64°F,极少低于45°F或高于76° ...
思考: 我们已找到德州奥斯汀一月的平均气温,为64°F。现在我们可以使用计算器进行乘法运算。
> 进入Calculator#run
pi * sqrt(64)
RubyREPL: puts(Math::PI * Math.sqrt(64))
答案: 25.132741228718345
{"status":"ok","answer":"25.132741228718345","explanation":"答案: 25.132741228718345","code":"puts(Math::PI * Math.sqrt(64))"}
< 退出Calculator#run
观察:25.132741228718345
我们得到了最终答案。
最终答案:25.132741228718345
下一步:
1. 德州奥斯汀七月的平均气温是多少?
2. Pi的十进制值是多少?
3. 佛罗里达州迈阿密一月的平均气温的平方根是多少?
< 退出Zero Shot#run
更多示例
请参见这里的Jupyter Notebook获取更多示例。
对于Swagger boxcar,请参见这里的Jupyter Notebook。
对于简单的向量存储和搜索,请参见这里的Jupyter Notebook。
注意,我们与一些人谈话时发现他们不知道可以运行Ruby Jupyter笔记本。实际上,你可以。
日志
如果你在Rails应用程序中使用它,或配置Boxcars.configuration.logger = your_logger
,日志将记录到你的日志文件中。
此外,如果你设置此标志:Boxcars.configuration.log_prompts = true
连接的引擎实际传递的提示将记录下来。这默认关闭,因为它非常冗长,但在调试提示时非常有用。
否则,我们将打印到标准输出。
开发
检出仓库后,运行bin/setup
安装依赖项。然后,运行rake spec
运行测试。你还可以运行bin/console
以获得一个允许你进行实验的交互提示。
要将此宝石安装到本地机器上,运行bundle exec rake install
。要发布新版本,请在version.rb
中更新版本号,然后运行bundle exec rake release
,这将为版本创建一个git标签,推送git提交和创建的标签,并将.gem
文件推送到rubygems.org。
贡献
欢迎在GitHub上提交错误报告和拉取请求:https://github.com/BoxcarsAI/boxcars。本项目旨在成为一个安全、欢迎的协作空间,贡献者须遵守[行为准则](https://github.com/BoxcarsAI/boxcars/blob/main/CODE_OF_CONDUCT.md)。
许可证
该宝石作为开放源代码,根据MIT许可证的条款提供。
行为准则
所有在Boxcars项目的代码库、问题跟踪器、聊天室和邮件列表中互动的人员需遵守行为准则。