30 秒看懂
Matthew Berman 演示了 a16z Companion App。这个教程项目结合角色描述、语言模型、向量搜索和对话存储,让开发者创建可聊天的角色。他使用托管服务配置了一个本地运行的 Web 应用,并展示了编辑角色文件的位置。 视频发布于 2023 年 7 月,界面、模型和价格可能已经变化。Berman 演示了浏览器聊天,但他说 Twilio 短信集成返回了 401 错误。项目仓库将这个技术栈定位为开发者教程,而非完整的生产平台。
- 1可配置背景的角色项目提供示例角色,开发者可以更改个性、背景故事和模型选择。仓库将其定位为教程入门技术栈。
- 2多服务技术栈演示中的 Next.js 应用通过外部服务实现身份验证、语言模型、向量搜索和对话存储,还提供可选的部署和短信集成。
- 3配置凭据Berman 复制环境变量示例文件,填入所选服务商的设置。本次演示使用 Clerk、OpenAI、Pinecone 和 Upstash。
- 4生成嵌入向量运行仓库中的命令,将角色描述生成的嵌入向量载入所选向量数据库,随后 Berman 启动开发服务器。
- 5编辑角色个性文本保存在角色文件中;模型和可选电话号码等元数据保存在 companions.json 中。Berman 表示,他的 Twilio 测试返回 401 错误。
要点建议
- 这个入门项目定义角色个性,并用向量搜索和对话队列提供上下文。
- 演示中的 Web 应用虽然在本地运行,仍依赖托管的身份验证、模型和数据库服务。
- 2023 年的配置使用 Clerk、OpenAI 或 Replicate、Pinecone 或 Supabase 以及 Upstash 实现不同功能。
- 角色描述与角色元数据分别在不同文件中编辑。
- 视频没有演示成功发送短信:Berman 报告 Twilio 返回了 401 错误。
按章节阅读整理后的全文
陪伴应用及其技术栈
Berman 演示与示例角色对话,并介绍项目使用的服务。这段教程录制于 2023 年。
我想演示如何搭建 [a16z Companion App](https://github.com/a16z-infra/companion-app),这是一个用于创建聊天角色的入门项目。你可以为角色设定个性和背景故事,并存储对话历史。仓库将其描述为开发者教程;本次演示中的界面和集成反映的是 2023 年 7 月的情况。
示例应用自带几个角色,使用托管的 ChatGPT 和 Vicuna 模型。作者告诉我,包括数据库在内的完全本地版本已列入路线图,但那是一项计划,并非这次演示的内容。我和 Alex 简单聊了几句,他的回答提到了绘画和科幻书籍。
首先克隆项目仓库并进入其目录。应用组合了多种服务:Next.js 负责应用逻辑,Clerk 负责身份验证,Pinecone 或 Supabase 负责向量存储,LangChain 负责模型编排,OpenAI 或 Replicate 负责文本生成,Upstash 负责对话历史。项目还列出 Fly 和 Twilio,分别用于部署和短信;其中一些集成是可选的。

配置服务
他安装依赖、准备环境变量文件,并配置身份验证、模型访问、向量存储和对话历史。虽然应用在本地运行,他使用的服务仍由外部托管。

克隆后运行 `npm install`,然后在编辑器中打开文件夹。将 `.env.local.example` 重命名或复制为 `.env.local`,填入所选服务的设置。本次演示我使用 Pinecone;示例也提供 Supabase,我提到它可以在本地托管。
配置身份验证时,先创建 Clerk 应用并选择登录方式。我选择电子邮件和 Google 登录,再把可发布密钥和私钥复制到对应的环境变量中,保留画面中已有的登录和注册路径。这些配置界面和选项现在可能有所不同。
接下来,在环境文件中添加 OpenAI API 密钥。我在这里使用 OpenAI;项目也支持由 Replicate 托管的 Vicuna 13B,需要提供 Replicate token。演示中的 Web 服务器在本地运行,但模型调用和其他选定服务仍由外部托管。
创建一个 Pinecone 索引,在环境文件中填入索引名称、环境和 API 密钥。项目配置为示例嵌入向量指定了 1,536 个维度。画面中的入门套餐信息属于历史信息;如果改用 Supabase,就按照项目说明配置该服务。
存储对话需要创建 Upstash Redis 数据库,选择区域以及画面中展示的 SSL 和淘汰设置,然后把 REST URL 和 token 复制到环境文件。视频使用的是托管 Redis 服务,因此这并不是完全本地的技术栈。
运行并自定义角色
他生成嵌入向量、启动应用并编辑角色定义。演示中尝试的 Twilio 集成没有成功。

仓库针对 Pinecone 和 Supabase 分别提供了生成嵌入向量的命令。我运行 Pinecone 命令,将角色信息生成的嵌入向量载入向量存储,然后用 `npm run dev` 启动开发服务器。我在浏览器打开本地地址,通过 Clerk 登录。

本地应用展示了使用 ChatGPT 的 Alex 和 Sebastian,以及使用 Vicuna 13B 的 Rosie 和 Lucky。我说过,即使界面当时没有显示全部对话历史,历史仍会被存储。仓库解释说,对话队列和检索到的角色信息提供上下文;存储历史不等于模型拥有无限记忆。

要更改个性,可以打开 `companions` 目录下对应的文本文件。Alex 的文件描述了一个喜欢绘画、编程和科幻作品的虚构角色。你可以编辑描述或创建新个性,再在 `companions.json` 中更新图像、模型和可选电话号码等元数据。

项目包含通过 Twilio 给角色发短信的集成,但我没能让它正常工作:尝试时返回了 401 错误。我打算继续排查,如果解决就补充更新。这次成功演示的是浏览器中的陪伴角色。
同频道的其他文章
34:21EN → 简体中文
0:26EN → 简体中文
0:36EN → 简体中文
0:21EN → 简体中文
25:50EN → 简体中文
32:20EN → 简体中文