如何使用一个API访问多个LLM创建AI聊天机器人

使用 Replicate 和 Streamlit 以编程方式集成 AI

作者:Liz Acosta
发布于 AI应用示例,
How to create an AI chatbot using one API to access multiple LLMs

记得第一次玩AI图像生成器时有多酷吗?那些拥有两千万根手指和噩梦般吃意大利面的图片不仅仅有趣,它们无意中揭示了一个事实:哦!AI模型和我们一样聪明。像我们一样,它们也很难画出手。

An AI generated image of a man eating spaghetti ... strangely.
这实际上是 Adobe 的 Firefly 生成的……这个模型仍然在意大利面和手上挣扎。

AI模型迅速变得更加复杂,但现在模型太多了。而且——再说一次——就像我们一样,有些模型在某些任务上比其他模型做得更好。以文本生成为例。尽管Llama、Gemma和Mistral都是LLMs,但有些模型更擅长生成代码,而另一些则更擅长头脑风暴、编码或创意写作。它们根据提示提供不同的优势,因此在你的AI应用中包含不止一个模型可能是有意义的。

如何在不重复代码的情况下将所有这些模型集成到你的应用中?如何使你的AI使用更具模块化,从而更容易维护和扩展?这就是API发挥作用的地方,它可以提供一套标准化的指令,用于跨不同技术进行通信。

在这篇博文中,我们将探讨如何使用 Replicate 和 Streamlit 创建一个应用,让你通过一个API调用来配置和提示不同的LLMs。别担心——当我说“应用”时,我不是指你需要启动一个完整的Flask服务器,或繁琐地配置你的路由,或担心CSS。Streamlit已经为你搞定了 😉

继续阅读以了解

  • 什么是 Replicate
  • 什么是 Streamlit
  • 如何构建一个 Replicate 聊天机器人 Streamlit 应用演示
  • 以及使用 Replicate 的最佳实践

不想阅读?这里有一些其他方式来探索这个演示

  • 在 Streamlit Cookbook 仓库中找到代码 此处
  • 观看 Streamlit 高级开发者布道师 Chanin Nantasenamat 和 Replicate 创始设计师 Zeke Sikelianos 的视频演练 此处
  • 查看应用的部署版本 此处 或查看下方的嵌入式应用(点击全屏查看)

什么是 Replicate?

Replicate 是一个平台,使开发者能够通过 CLI、API 或 SDK 部署、微调和访问开源AI模型。该平台使将AI能力以编程方式集成到软件应用中变得容易。

Replicate 上可用的模型

  • 文本:像 Llama 3 这样的模型可以根据输入提示生成连贯且上下文相关的文本。
  • 图像:像 stable diffusion 这样的模型可以从文本提示生成高质量图像。
  • 语音:像 whisper 这样的模型可以将语音转换为文本,而像 xtts-v2 这样的模型可以生成听起来自然的语音。
  • 视频:像 animate-diff 或 stable diffusion 的变体(如 videocrafter)可以分别从文本和图像提示生成和/或编辑视频。

当一起使用时,Replicate 允许你开发多模态应用,这些应用可以接受各种格式(无论是文本、图像、语音还是视频)的输入并生成输出。 

什么是 Streamlit?

Streamlit 是一个开源的 Python 框架,只需几行代码即可构建高度交互的应用。Streamlit 集成了所有最新的生成式AI工具,例如任何LLM、向量数据库或各种AI框架,如 LangChainLlamaIndex 或 Weights & Biases。Streamlit 的聊天元素使得与AI交互变得特别容易,因此你可以构建能够“与你的数据对话”的聊天机器人。

结合像 Replicate 这样的平台,Streamlit 允许你创建生成式AI应用,而无需任何应用设计的开销。

要了解更多关于 Streamlit 的信息,请查看 101 指南。  

💡
要了解 Streamlit 如何让你更倾向于向前发展,请查看这篇博文

尝试应用示例:Replicate + Streamlit

但不要只听我说的。亲自试用这个应用观看视频演练,看看你的想法。 

在这个演示中,你将使用 Replicate 启动一个 Streamlit 聊天机器人应用。该应用使用一个API访问三个不同的LLMs,并调整温度(temperature)和 top-p 等参数。这些参数会影响AI生成文本的随机性和多样性,以及选择 token 的方法。

💡
什么是模型温度?

温度控制模型如何选择 token。较低的温度使模型更保守,倾向于常见和“安全”的词语。相反,较高的温度鼓励模型通过选择概率较低的 token 来承担更多风险,从而产生更具创意的输出。

什么是 top-p?

也称为“核采样”(nucleus sampling)——是另一种调整随机性的方法。它通过在 top-p 值增加时考虑更广泛的 token 集合来工作。较高的 top-p 值会导致采样的 token 范围更广,产生更多样的输出。

前提条件

  • Python 版本 >=3.8, !=3.9.7
  • 一个 Replicate API 密钥
    (请注意,访问超出免费试用限制的功能需要支付方式。)
💡
要了解有关API密钥的更多信息,请查看此处的博文。

环境设置

本地设置

  1. 克隆 Cookbook 仓库:git clone https://github.com/streamlit/cookbook.git
  2. 从 Cookbook 根目录,进入 Replicate 应用示例目录:cd recipes/replicate
  3. 将你的 Replicate API 密钥添加到 .streamlit/secrets_template.toml 文件中
  4. 将文件名从 secrets_template.toml 更新为 secrets.toml: mv .streamlit/secrets_template.toml .streamlit/secrets.toml
    (要了解有关 Streamlit 中密钥处理的更多信息,请参阅此处的文档。)
  5. 创建一个虚拟环境:python -m venv replicatevenv
  6. 激活虚拟环境:source replicatevenv/bin/activate  
  7. 安装依赖项:pip install -r requirements.txt

GitHub Codespaces 设置

  1. 从 GitHub 上的 Cookbook 仓库中,通过选择 Code 按钮中的 Codespaces 选项来创建一个新的 codespace
  2. codespace 生成后,将你的 Replicate API 密钥添加到 recipes/replicate/.streamlit/secrets_template.toml 文件中
  3. 将文件名从 `secrets_template.toml` 更新为 secrets.toml
    (要了解有关 Streamlit 中密钥处理的更多信息,请参阅此处的文档。)
  4. 从 Cookbook 根目录,进入 Replicate 应用示例目录:cd recipes/replicate
  5. 安装依赖项:pip install -r requirements.txt

使用 Replicate 运行一个文本生成模型

  1. recipes/replicate 目录中创建一个名为 replicate_hello_world.py 的文件
  2. 将以下代码添加到文件中
    import replicate   
    import toml
    import os
    
    # Read the secrets from the secrets.toml file
    with open(".streamlit/secrets.toml", "r") as f:
        secrets = toml.load(f)
    
    # Create an environment variable for the Replicate API token
    os.environ['REPLICATE_API_TOKEN'] = secrets["REPLICATE_API_TOKEN"]
    
    # Run a model
    for event in replicate.stream("meta/meta-llama-3-8b",
    input={"prompt": "What is Streamlit?"},):
        print(str(event), end="")
    
  3. 运行脚本:python replicate_hello_world.py

你应该会看到模型生成的文本输出。

要了解有关 Replicate 模型及其工作原理的更多信息,你可以参阅此处的文档。其核心是,Replicate 的“模型”指的是一个经过训练、打包并发布的软件程序,它接受输入并返回输出。

在这个特定案例中,模型是 meta/meta-llama-3-8b,输入是 "prompt": "What is Streamlit?"。当你运行脚本时,会调用 Replicate 的端点,打印出的文本是通过 Replicate 从模型返回的输出。

运行 Replicate Streamlit 聊天机器人应用演示

要运行演示应用,请从 recipes/replicate 应用示例目录中使用 Streamlit CLI:streamlit run streamlit_app.py

运行此命令会将应用部署到 localhost 上的一个端口。当你访问此位置时,应该能看到一个 Streamlit 应用正在运行。

你可以使用此应用通过 Replicate 提示不同的 LLMs,并根据你提供的配置生成文本。

一个用于多个 LLM 模型的通用 API 

使用 Replicate 意味着你可以用一个API提示多个开源 LLMs,这有助于简化 AI 集成到现代软件流程中。

这是通过以下代码块实现的

for event in replicate.stream(
    model,
    input={
        "prompt": prompt_str,
        "prompt_template": r"{prompt}",
        "temperature": temperature,
        "top_p": top_p,
    },
):
    yield str(event)

modeltemperaturetop p 配置由用户通过 Streamlit 的输入控件提供。Streamlit 的聊天元素使在你的应用中集成聊天机器人功能变得容易。最棒的是,你不需要了解 JavaScript 或 CSS 来实现和样式化这些组件——Streamlit 开箱即用地提供了所有这些。

Replicate 最佳实践

为提示使用最佳模型

Replicate 提供了一个API端点来搜索公共模型。你还可以在他们的网站上探索特色模型和用例。这使得很容易找到适合你特定需求的模型。

不同的模型有不同的性能特征。根据你对准确性和速度的需求,使用适当的模型。

使用 webhooks、流式传输和图像 URL 提升性能

Replicate 的输出数据仅在一小时内可用。使用 webhooks 将数据保存到你自己的存储中。你还可以设置 webhooks 来处理模型的异步响应。这对于构建可扩展的应用至关重要。

可能时利用流式传输。一些模型支持流式传输,让你在生成过程中获取部分结果。这对于实时应用来说是理想的。

使用图像 URL 比使用经过 base 64 编码的上传图像提供了更高的性能。

用 Streamlit 释放 AI 的潜力

有了 Streamlit,数月甚至数年的应用设计工作被简化为仅几行 Python 代码。它是展示你最新 AI 发明的完美框架。 

Streamlit Cookbook 中,使用其他 AI 应用示例快速上手并运行。(别忘了在论坛中向我们展示你正在构建什么!)

祝你 Streamlit 使用愉快!🎈

分享此文

评论

在我们的论坛中继续讨论 →

同样在 AI 应用示例中...

查看更多 →