ModelFusion: 构建AI应用的TypeScript库

Ray

modelfusion

ModelFusion简介

ModelFusion是一个强大的TypeScript库,旨在简化AI应用程序的开发过程。作为一个抽象层,它为开发者提供了一套统一的API,用于集成各种AI模型到JavaScript和TypeScript应用中。ModelFusion支持多种常见操作,如文本生成、对象生成和工具使用等,同时还提供了诸如可观察性、日志记录和自动重试等生产级功能。

主要特点

ModelFusion具有以下几个突出特点:

  1. 供应商中立: ModelFusion是一个非商业的开源项目,由社区驱动。开发者可以使用任何受支持的提供商。

  2. 多模态支持: 该库支持广泛的模型类型,包括文本生成、图像生成、视觉、文本到语音、语音到文本以及嵌入模型等。

  3. 类型推断和验证: ModelFusion在可能的情况下推断TypeScript类型,并验证模型响应。

  4. 可观察性和日志记录: 提供了观察者框架和日志支持,方便开发者监控和调试。

  5. 弹性和稳健性: 通过自动重试、限流和错误处理机制确保操作的无缝进行。

  6. 为生产而生: ModelFusion完全可树摇,可用于无服务器环境,并且只使用最小的依赖集。

快速安装

要开始使用ModelFusion,您可以通过npm安装:

npm install 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架构图

通过使用ModelFusion,您不仅可以加速开发过程,还可以确保您的AI应用具有良好的可扩展性和可维护性。随着项目的成长,ModelFusion的模块化设计和丰富的功能集将继续支持您的需求,使您的应用能够轻松适应新的挑战和机遇。

开始使用ModelFusion,探索AI应用开发的无限可能性吧!

avatar
0
0
0
最新项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号