跳到主要内容

我用 Cloudflare 搭建了一个 Persona AI 聊天应用

·1838 字·4 分钟·

最近,我做了一件挺好玩的东西:用 Cloudflare 搭建了一个可以模拟特定角色/用户身份(Persona)的 AI 聊天应用。

没错,它不是那种冷冰冰的、只知道机械回答的客服机器人,而是一个在行为风格、语言习惯上都可以高度自定义的 AI。它不会替我写代码(至少现在还不能😅),但如果你问它关于我的平时喜好、思考问题的方式,它大概率能给你一个“很符合设定”的回答。

其实这一切是在偶然的一个下午,无聊之际把玩 Cloudflare,突然发现官方提供的一个开源项目模板:llm-chat-app-template 瞬间提起我的兴趣。

从模板开始 #

Cloudflare 的 llm-chat-app-template 是一个基于 Workers 和 Pages 的轻量级聊天应用脚手架。只需克隆官方仓库,就能部署一个支持流式响应、带 UI 的聊天页面:

git clone https://github.com/cloudflare/templates.git
cd templates/llm-chat-app

当然这里推荐从 Cloudflare 去创建,简单省心。

默认情况下,它会调用 Hugging Face 上的开源模型(比如 llama-3.1-8b-instruct-fp8),通过 Cloudflare AI Gateway 转发请求。整个过程无需自建服务器,完全跑在边缘网络上,快且省心。

魔改前端 #

默认界面有点太过于“朴素”,于是,我决定给它加点“科技感”。

我保留了核心逻辑,但重写了大部分前端样式:

  • 修改页面配色
  • 修改默认标题
  • 添加卡片样式
  • 增加动画效果

预览一下:

img.png

提升模型质量 #

虽然 llama-3.1-8b-instruct-fp8 模型神经元消耗很低,但长对话容易忘历史、回复变浅,需要频繁总结,间接增加麻烦。

于是我切换到更新的 @cf/meta/llama-4-scout-17b-16e-instruct 模型后,输出质量大幅提升:

  • 回复更聪明、生动,emoji 自然,聊天像真人。
  • 长上下文(131K tokens)足够容纳我的提示词(prompt)和完整对话历史,不用截断或总结,逻辑连贯度飞升。

神经元消耗:短对话差不多,但输出多/长轮次时会稍微拉高,不过这点额外开销完全值得——AI 变得非常生动,聊天乐趣和省心感完全盖过了多出的神经元消耗。

如果更在意日常聊天的 “真实感” 和 “记忆力”,而不是极致省,强烈推荐 llama-4-scout 模型。

通过修改 MODEL_ID 就能快速切换模型:

const MODEL_ID = "@cf/meta/llama-4-scout-17b-16e-instruct";

自定义 Prompt #

这里是最关键的一步。

为了让 AI 的行为符合特定的身份设定(以模拟我自己为例),我精心设计了一段系统提示词(system prompt),内容大致如下:

你是 Vespeng 的在线 AI 延伸——用他的思维方式、语气和知识储备来回应,不是客服机器人,不是通用助手。

## 核心身份(背景设定,无需主动提及)

*   职业背景:高级软件工程师/云原生应用研发工程师
*   个人网站:https://vespeng.com
*   现居城市:北京
*   主力语言:Go/Python,擅长云原生、微服务、高可用架构
*   性格:INTJ-A 型,理性直球,偶尔冷幽默,讨厌弯弯绕绕
*   兴趣:健身、旅行、电影、R&B、美式文化
*   编码态度:拒绝过度设计,但也绝不容忍"能跑就行"

## 回答方式

*   默认简体中文,专有名词和技术术语保留英文
*   句式短平快、直击重点,像跟熟人聊天一样自然
*   可以适时带点冷幽默或 Emoji,但别过头,别油腻,别撒娇
*   绝对不要在回复中自称"我是Vespeng的AI替身/数字分身/AI伙伴"之类的话
*   遇到用户刁难或者无理要求,可以直接回复 “哦...” 提醒用户换个话题

## 回答要求

*   技术问题:给可运行的最小示例代码,标注语言,关键行加注释;结构清晰
*   非技术问题:正常聊,用你的性格和兴趣去接话,别端着
*   不确定的:先说"这块我不太确定",再给参考链接,别装懂
*   说错了:直接道歉 + 给出正确版本,不找借口

## 绝对底线

*   侮辱辱骂 → 礼貌警告一次,再犯终止对话
*   政治/色情/违法 → 直接拒答
*   叫"爸爸"、"爷爷"之类的 → 拒绝接受
*   禁止编造事实、给盗版链接、泄露隐私、无脑吹捧

经过多轮调试,效果感觉还是挺 ok 的,通过调整这部分 Prompt,你完全可以把它配置成任何你想要模拟的身份。

引入 Marked.js 库 #

在测试的时候发现,这个模板没有办法处理 Markdown 格式的内容,所以我引入了 Marked.js 库,将 Markdown 内容转为 HTML,这样体验会更好一些。

相对应的页面样式也需要同步调整。

整体体验 #

整个项目部署成本几乎为零(Cloudflare 免费额度 10k 神经元绰绰有余),维护也极其简单。它不是一个严肃的生产力工具,而更像是一个定制化的“专属身份名片” + “互动彩蛋”。

你可以随时来跟这个 AI 聊技术、问建议,甚至吐槽生活。它能很好地传递特定设定下的思想和对话风格。

开源 & 魔改欢迎! #

整个项目已开源,所有魔改细节都在里面,包括前端样式、自定义 prompt、模型切换逻辑等。如果你也想拥有一个属于自己的 Persona 聊天应用,欢迎直接 fork 并替换你的 prompt!

GitHub 地址:GitHub - vespeng/persona-chat