Cursive 项目介绍
Cursive 是一个通用且直观的框架,用于与大语言模型(LLMs)交互。它适用于任何 JavaScript 运行环境,并致力于提供良好的扩展性和开发者体验。
项目亮点
-
兼容性:Cursive 可以在多种运行环境中工作,包括浏览器、Node.js、Deno、Bun 以及 Cloudflare Workers。用户可以通过 WindowAI 安全地使用自己的凭证、服务提供商和模型来进行补全。
-
可扩展性:在补全生命周期的任何阶段都可以轻松接入,无论是记录、缓存还是修改结果。
-
功能支持:能够简单地描述 LLM 可用的函数定义,目前支持的模型包括 GPT-4、GPT-3.5、Claude 2 和 Claude Instant。
-
通用性:Cursive 的目标是连接尽可能多的不同模型的功能,使用户可以通过单一接口自由选择模型。
-
信息透明:内置的令牌使用量和成本计算功能尽可能地准确。
-
高可靠性:Cursive 提供自动重试功能,并在超过上下文长度时自动扩展模型,这些选项可以根据需求进行配置。
快速入门
-
安装 Cursive:
npm i cursive
-
使用实例:
import { useCursive } from 'cursive' const cursive = useCursive({ openAI: { apiKey: 'sk-xxxx' } }) const { answer } = await cursive.ask({ prompt: 'What is the meaning of life?', })
常规用法
对话
使用 cursive
进行对话非常简单,用户可以传递各种熟悉的选项。
const resA = await cursive.ask({
prompt: 'Give me a good name for a gecko.',
model: 'gpt-4',
maxTokens: 16,
})
console.log(resA.answer) // Zephyr
const resB = await resA.conversation.ask({
prompt: 'How would you say it in Portuguese?'
})
console.log(resB.answer) // Zéfiro
流式处理
支持流式处理,同时帮用户跟踪令牌使用情况。
const result = await cursive.ask({
prompt: 'Count to 10',
stream: true,
onToken(partial) {
console.log(partial.content)
}
})
console.log(result.usage.totalTokens) // 40
函数功能
用户可以使用 Type
定义并描述函数,还配有其执行代码。这部分由 typebox
库支持。
import { Type, createFunction, useCursive } from 'cursive'
const cursive = useCursive({
openAI: {
apiKey: 'sk-xxxx'
}
})
const sum = createFunction({
name: 'sum',
description: 'Sums two numbers',
parameters: {
a: Type.Number({ description: 'Number A' }),
b: Type.Number({ description: 'Number B' }),
},
async execute({ a, b }) {
return a + b
},
})
const { answer } = await cursive.ask({
prompt: 'What is the sum of 232 and 243?',
functions: [sum],
})
console.log(answer) // The sum of 232 and 243 is 475.
函数的结果会自动输入对话中,并进行下一次补全。如果想停止这种行为,可以在函数定义中添加 pause
。
钩子
用户可以在补全生命周期的任何部分挂接钩子。
cursive.on('completion:after', (result) => {
console.log(result.cost.total)
console.log(result.usage.total_tokens)
})
cursive.on('completion:error', (error) => {
console.log(error)
})
嵌入功能
可以轻松创建嵌入。
const embedding = await cursive.embed('This should be a document.')
这种方法很快将支持多种类型的文档和集成。
可靠性
Cursive 提供自动重试功能,并在补全失败时进行模型扩展。可通过传递 retry
和 expand
选项进行配置。
const cursive = useCursive({
maxRetries: 5,
expand: {
enable: true,
defaultsTo: 'gpt-3.5-turbo-16k',
modelMapping: {
'gpt-3.5-turbo': 'gpt-3.5-turbo-16k',
'gpt-4': 'claude-2',
},
},
allowWindowAI: true,
countUsage: false,
})
示例项目
- Nuxt 简单应用示例
- Cloudflare Workers 边缘 API 示例
未来路线图
- 已支持供应商:Anthropic
- 计划支持:Cohere、Azure OpenAI 模型、Huggingface、Replicate (均通过 WindowAI 在浏览器中支持)
致谢
感谢 @disjukr 将 cursive
npm 包名转让给我们!