ModelFusion简介
ModelFusion是一个强大的TypeScript库,旨在简化AI应用程序的开发过程。作为一个抽象层,它为开发者提供了一套统一的API,用于集成各种AI模型到JavaScript和TypeScript应用中。ModelFusion支持多种常见操作,如文本生成、对象生成和工具使用等,同时还提供了诸如可观察性、日志记录和自动重试等生产级功能。
主要特点
ModelFusion具有以下几个突出特点:
-
供应商中立: ModelFusion是一个非商业的开源项目,由社区驱动。开发者可以使用任何受支持的提供商。
-
多模态支持: 该库支持广泛的模型类型,包括文本生成、图像生成、视觉、文本到语音、语音到文本以及嵌入模型等。
-
类型推断和验证: ModelFusion在可能的情况下推断TypeScript类型,并验证模型响应。
-
可观察性和日志记录: 提供了观察者框架和日志支持,方便开发者监控和调试。
-
弹性和稳健性: 通过自动重试、限流和错误处理机制确保操作的无缝进行。
-
为生产而生: ModelFusion完全可树摇,可用于无服务器环境,并且只使用最小的依赖集。
快速安装
要开始使用ModelFusion,您可以通过npm安装:
npm install modelfusion
或者使用以下入门模板之一:
- ModelFusion终端应用入门
- Next.js, Vercel AI SDK, Llama.cpp & ModelFusion入门
- Next.js, Vercel AI SDK, Ollama & ModelFusion入门
使用示例
ModelFusion提供了多种功能,以下是一些常用功能的示例:
生成文本
使用语言模型和提示生成文本。如果模型支持,您可以流式传输文本。对于支持多模态提示的模型(如llama.cpp),您还可以使用图像作为提示的一部分。
import { generateText, openai } from "modelfusion";
const text = await generateText({
model: openai.CompletionTextGenerator({ model: "gpt-3.5-turbo-instruct" }),
prompt: "Write a short story about a robot learning to love:\n\n",
});
生成对象
使用语言模型和模式生成类型化对象。
import {
ollama,
zodSchema,
generateObject,
jsonObjectPrompt,
} from "modelfusion";
const sentiment = await generateObject({
model: ollama
.ChatTextGenerator({
model: "openhermes2.5-mistral",
maxGenerationTokens: 1024,
temperature: 0,
})
.asObjectGenerationModel(jsonObjectPrompt.instruction()),
schema: zodSchema(
z.object({
sentiment: z
.enum(["positive", "neutral", "negative"])
.describe("Sentiment."),
})
),
prompt: {
system:
"You are a sentiment evaluator. " +
"Analyze the sentiment of the following product review:",
instruction:
"After I opened the package, I was met by a very unpleasant smell " +
"that did not disappear even after washing. Never again!",
},
});
生成图像
从提示生成图像。
import { generateImage, openai } from "modelfusion";
const image = await generateImage({
model: openai.ImageGenerator({ model: "dall-e-3", size: "1024x1024" }),
prompt:
"the wicked witch of the west in the style of early 19th century painting",
});
生成语音
从文本合成语音(音频)。也称为TTS(文本到语音)。
import { generateSpeech, lmnt } from "modelfusion";
// `speech` is a Uint8Array with MP3 audio data
const speech = await generateSpeech({
model: lmnt.SpeechGenerator({
voice: "034b632b-df71-46c8-b440-86a42ffc3cf3", // Henry
}),
text:
"Good evening, ladies and gentlemen! Exciting news on the airwaves tonight " +
"as The Rolling Stones unveil 'Hackney Diamonds,' their first collection of " +
"fresh tunes in nearly twenty years, featuring the illustrious Lady Gaga, the " +
"magical Stevie Wonder, and the final beats from the late Charlie Watts.",
});
工具和向量索引
ModelFusion还提供了工具和向量索引功能,这些功能对于构建聊天机器人和智能代理特别有用。
工具
工具是可以由AI模型执行的函数(及相关元数据)。ModelFusion提供了几个开箱即用的工具,如Math.js、MediaWiki搜索、SerpAPI和Google自定义搜索。您还可以创建自定义工具。
向量索引
向量索引允许您存储和检索嵌入向量,这对于实现高效的相似性搜索和信息检索非常有用。
const texts = [
"A rainbow is an optical phenomenon that can occur under certain meteorological conditions.",
"It is caused by refraction, internal reflection and dispersion of light in water droplets resulting in a continuous spectrum of light appearing in the sky.",
// ...
];
const vectorIndex = new MemoryVectorIndex<string>();
const embeddingModel = openai.TextEmbedder({
model: "text-embedding-ada-002",
});
// update an index - usually done as part of an ingestion process:
await upsertIntoVectorIndex({
vectorIndex,
embeddingModel,
objects: texts,
getValueToEmbed: (text) => text,
});
// retrieve text chunks from the vector index - usually done at query time:
const retrievedTexts = await retrieve(
new VectorIndexRetriever({
vectorIndex,
embeddingModel,
maxResults: 3,
similarityThreshold: 0.8,
}),
"rainbow and water droplets"
);
文本生成提示样式
ModelFusion支持不同的提示样式(如文本、指令或聊天提示)。这些提示样式可以通过.withTextPrompt()
、.withChatPrompt()
和.withInstructionPrompt()
方法访问:
const text = await generateText({
model: openai
.ChatTextGenerator({
// ...
})
.withTextPrompt(),
prompt: "Write a short story about a robot learning to love",
});
日志记录和可观察性
ModelFusion提供了观察者框架和日志支持。您可以轻松跟踪运行和调用层次结构,并添加自己的观察者。
import { generateText, openai } from "modelfusion";
const text = await generateText({
model: openai.CompletionTextGenerator({ model: "gpt-3.5-turbo-instruct" }),
prompt: "Write a short story about a robot learning to love:\n\n",
logging: "detailed-object",
});
结论
ModelFusion为开发者提供了一个强大而灵活的工具集,用于构建各种AI应用。无论您是想创建一个简单的聊天机器人,还是构建一个复杂的多模态AI系统,ModelFusion都能为您提供所需的抽象和功能。通过其统一的API、多模态支持和生产级功能,ModelFusion大大简化了AI应用的开发过程,使开发者能够专注于创造独特的用户体验,而不是处理底层的模型集成细节。
随着AI技术的不断发展,ModelFusion也在持续更新和改进。开发者社区的贡献使得这个库能够跟上最新的AI趋势和最佳实践。无论您是AI开发新手还是经验丰富的专家,ModelFusion都为您提供了一个理想的起点,让您能够快速、高效地将AI功能集成到您的应用中。
通过使用ModelFusion,您不仅可以加速开发过程,还可以确保您的AI应用具有良好的可扩展性和可维护性。随着项目的成长,ModelFusion的模块化设计和丰富的功能集将继续支持您的需求,使您的应用能够轻松适应新的挑战和机遇。
开始使用ModelFusion,探索AI应用开发的无限可能性吧!