#语言模型 #谷歌 #谷歌API #网络界面 #文本生成 #网络 #API

bin+lib llmclient

Rust LLM 客户端 - Gemini, GPT, Claude, Mistral, Groq

14 个版本

0.3.0 2024年6月8日
0.2.1 2024年5月23日
0.2.0 2024年4月17日
0.1.11 2024年4月11日
0.1.9 2024年3月29日

#173 in HTTP 客户端

MIT/Apache

185KB
3.5K SLoC

Rust 3K SLoC // 0.1% comments Q 479 SLoC // 0.1% comments

Google Gemini、OpenAI GPT、Anthropic Claude 和 Mistral 的 LLM Rust 客户端

最新版本

0.2.0 接口更改。引入了各种辅助函数和默认 LLM

0.2.1 增加接口函数以提供模型作为参数。

0.3.0 '函数' 调用。请参阅说明!

关于函数调用的说明:此功能现已实现且大多数情况下可以正常工作。返回的 JSON 响应有很大差异,因此这是一个尝试以通用方式获取函数调用响应的最佳努力尝试。与往常一样,Gemini 最复杂,有时会返回函数调用结果,但有时会“聪明”地返回正常的文本响应,例如“那是对的。一年有525,600分钟。还有什么我可以帮您的吗?”而不是包含后续函数调用(在这种情况下为计算器函数给定:(60 * 24) * 365.25)数据的工具响应。Gemini 中的系统说明目前无法与函数调用一起使用,因此继续使用伪造系统提示与对话的老方法。另外,Gemini 和 Claude 每次只能处理一个函数调用!函数调用质量应被视为仅供参考。

要定义一个函数,请使用以下格式

` // 被调用的函数的完整描述 // : 第一个参数的完整描述 ... // : 第 n 个参数的完整描述 fn (, ... )

所有参数都是字符串,返回值也是字符串。

还应提供一条或多条消息。这是 LLM 识别函数调用所需参数的数据。上面提供的函数和参数描述对于 LLM 正确识别和提取所需数据非常重要。

接下来,除了任何重构之外,还可能提供一个具有更多统计信息和相关启发式算法的负载均衡网络界面,这可能或可能不会作为服务提供。还可以用其他语言(Python、Java 和 C/C++ 是最明显的)包装。还可以进行嵌入和图像生成,但并非所有 LLM 都支持这些功能。需求如何?

简介

Google 是首个有望成为一系列连接到各种在线 LLM 接口的系列中的第一个。OpenAI、Anthropic 和 Mistral 都为基本的文本功能工作,但需要一些润色。变动性很高,每天能用来创建和维护这些接口的时间有限。

目标

目标是拥有一个与主要供应商的透明接口。然后从多个维度监控性能、质量和稳定性,并为大量用户提供一项服务,该服务将调整一个或多个因素,在满足其他约束条件下提供稳定的服务,如果需要,以“最佳”价格点提供。

入门指南

为了开始(谷歌)

  • 创建谷歌API账户
  • 创建谷歌应用
  • 在本地安装gcload
  • 对于OpenAI GPT,创建一个API账户并获取密钥
  • 编辑env文件并在shell中运行: . ./env

对于其他提供商,遵循API说明,通常意味着获取一个密钥。

测试这个比较棘手,有各种可能的响应变体(假设API提供商没有改变他们的接口)。只要成功调用LLM且不返回错误,测试就会通过。可能有许多内部原因导致它失败(未结束的'STOP',安全原因等)。要显示更多上下文,使用--nocapture标志调用测试。

待办事项

  • 更好地支持非文本搜索 - 现在可用函数
  • 修复随着接口成熟必然会出现的错误
  • 跟上谷歌和其他人的步伐

一个示例对话

cargo run --release 0

输入多行,然后以^D [或在Windows上的^Z]结束答案。'quit'或'exit'也行。要清除历史记录,请使用'new'或'clear'。要显示对话历史,请使用'show'或'history'

你的问题:Hello Llm,请叫我Fred ---------- GEMINI ---------- 用法:令牌:7 + 12 = 19 时间:1.819757718秒

Hello Fred,今天我能帮您做什么?

你的问题:我怎么会叫你? ---------- GEMINI ---------- 用法:令牌:27 + 5 = 32 时间:1.574383613秒

你叫我Fred。

你的问题:不,我叫你Llm! ---------- GEMINI ---------- 用法:令牌:55 + 74 = 129 时间:2.171321778秒

我为误解道歉。你叫我LLM,这是大型语言模型的缩写。我是一种在大量文本和代码数据集上训练的人工智能。我被设计成理解并生成类似人类的语言,并根据我的训练数据回答问题和执行任务。

今天您还有其他需要帮助的吗?

你的问题:是的,奥兹国的首都是什么? ---------- GEMINI ---------- 用法:令牌:140 + 54 = 194 时间:2.066134773秒

奥兹国的首都是翡翠城。这是L. Frank Baum在他的小说《奥兹国的奇妙魔术师》中创造的陆地。因此,它没有现实世界的首都。然而,在小说中,翡翠城被描述为奥兹国的首都。

你的问题:我是苏格兰人,《奥兹国的奇妙魔术师》是一本美国书。我们在文化上更接近澳大利亚人。了解这一点,你将如何回答原始问题? ---------- GEMINI ---------- 用法:令牌:229 + 157 = 386 时间:3.023510818秒

如果我们考虑苏格兰和澳大利亚之间的文化相似性,以及这两个国家都是英联邦成员的事实,那么对“奥兹国的首都是什么?”这个问题的答案可能是澳大利亚的首都堪培拉。这个答案考虑了以下因素

  • 苏格兰和澳大利亚之间共享的文化遗产,两者都是前英国殖民地。
  • 两国之间的紧密政治和经济联系。
  • 澳大利亚在非正式场合通常被称为“Oz”。

虽然“翡翠城”在L. Frank Baum创造的虚构奥兹国中在技术上正确,但考虑到问题的文化和地理背景,答案“堪培拉”可能更合适。

你的问题:非常好。不需要提供关于您自己的额外解释。我理解您的设计。火星的首都是什么? ---------- GEMINI ---------- 用法:令牌:411 + 266 = 677 时间:3.530722284秒

火星没有首都,因为它无人居住,也没有政府或政治结构。然而,如果我们考虑未来人类在火星上定居的可能性,有一些地方被提议作为潜在的都城:* 伊里斯蒙斯山:位于火星北半球的一个大型火山,伊里斯蒙斯山因其相对温和的气候和丰富的水冰而被认为是未来火星都城的理想候选地。

  • 马尔赛瑞里斯峡谷:位于火星赤道地区的一个广阔的峡谷系统,马尔赛瑞里斯峡谷也是火星都城的潜在地点。峡谷的墙壁可以提供对辐射和沙尘暴的自然保护,地下蓄水层可能提供水源。
  • 赫拉斯盆地:位于火星南半球的一个大型撞击坑,赫拉斯盆地据信其表面下有大量冰。这些冰可用于支持人类定居,撞击坑的墙壁可以提供对辐射和沙尘暴的保护。

最终,选择火星首都将取决于多种因素,包括资源的可用性、定居者的技术能力以及当时的政治和经济考虑。

你的问题


$ cargo run --release 1

输入多行,然后以^D [或在Windows上的^Z]结束答案。'quit'或'exit'也行。要清除历史记录,请使用'new'或'clear'。要显示对话历史,请使用'show'或'history'

你的问题:你好Llm,请叫我弗雷德 ---------- GPT ---------- 令牌:14 + 11 = 25 时间:1.152422321秒

你好,弗雷德!今天我能帮你什么忙?

你的问题:我刚才叫你什么? ---------- GPT ---------- 令牌:39 + 16 = 55 时间:1.170262408秒

你叫我“Llm”。我能进一步帮助你吗,弗雷德?

你的问题:是的,奥兹国的首都是哪里? ---------- GPT ---------- 令牌:72 + 55 = 127 时间:3.21685388秒

在L. Frank Baum创造的虚构世界奥兹中,首都被称为翡翠城。它被描述为一个美丽的城市,一切皆绿,颜色如翡翠,位于奥兹国的中心。

你的问题:我是苏格兰人,《绿野仙踪》是一本美国书。我们与澳大利亚人有更接近的文化联系。考虑到这一点,你将如何回答原始问题? ---------- GPT ---------- 令牌:166 + 71 = 237 时间:3.31402017秒

考虑到这个背景,当你说到与澳大利亚有联系的“奥兹”的首都时,“奥兹”通常被亲切地用作澳大利亚的昵称。在这种情况下,澳大利亚(奥兹)的首都是堪培拉。堪培拉位于澳大利亚首都领地,是国家的政治和行政中心。

你的问题:非常好。不需要提供关于你自己的额外解释。我理解你的设计。火星的首都是什么? ---------- GPT ---------- 令牌:269 + 58 = 327 时间:3.679701811秒

截至我的最后更新(2023年),由于火星没有建立任何人类定居点或治理,因此没有首都。关于城市、首都或任何形式的人类在火星上的建立的所有讨论都是纯粹推测性的,是科幻小说或未来太空探索计划的一部分。

你的问题


尝试另一个带有系统上下文的对话。一个示例可以在system.txt.orig(复制到system.txt)中找到,可以随意编辑。

依赖关系

~9–23MB
~336K SLoC