💭 一个可二次开发 Chat Bot 对话 Web 端原型模板, 基于 Vue3、Vite 5、TypeScript、Naive UI 、UnoCSS 等主流技术构建, 🧤简单集成大模型 API, 采用单轮 AI 问答对话模式, 每次提问独立响应, 无需上下文, 支持打字机效果流式输出, 集成 markdown-it, highlight.js 语法高亮预览, 💼 易于定制和快速搭建 Chat 类大语言模型产品
markdown-it
和 highlight.js
.env
文件管理 API 密钥,支持不同大模型的配置dbaeumer.vscode-eslint
>= v3.0.5 (pre-release)
https://github.com/user-attachments/assets/42e8254f-d1bc-42e0-88dd-90279d040ae0
pnpm i
pnpm dev
本地运行后,可以通过访问 http://localhost:2048
来查看应用。
在运行项目之前,需要设置大语言模型的 API 密钥:
执行以下命令,自动创建环境变量模板文件 .env
文件:
cp .env.template .env
编辑 .env
文件,填入你的 API 密钥
VITE_SPARK_KEY=你的_星火_API_Key # 需要用冒号拼接key和secret,格式如 `key123456:secret123456`
VITE_SILICONFLOW_KEY=你的_SiliconFlow_API_Key # 通常以 `sk-` 开头,如 `sk-xxxxxx`
本项目提供了一个模拟开发模式,用于在本地开发环境或 Github 等部署环境中模拟调用大模型相关策略,无需调用真实 API 接口。该模式在 src/config/env.ts 文件中定义,由以下代码控制:
// src/config/env.ts
const isDev = import.meta.env.DEV
/**
* TODO: 若是本地开发环境、Github 部署环境,则模拟大模型相关策略,不调接口
*/
export const isMockDevelopment = isDev
|| process.env.VITE_ROUTER_MODE === 'hash'
// 打开此行,则会调用真实的大模型接口(需提前配置好 Key)
// export const isMockDevelopment = false
默认情况下,在开发环境或使用 hash
路由模式时, isMockDevelopment
会被设置为 true
, 这意味着应用将使用模拟数据而不是真实的大模型 API 接口。
如果想在所有环境中使用真实的 API,你有两个选择:
取消注释:将最后一行的代码注释取消,设置 isMockDevelopment = false
修改逻辑:全局搜索 isMockDevelopment
, 并修改相应的 if 判断逻辑,使其默认使用真实接口
请注意,无论选择哪种方式,都需要确保项目已经正确配置了 .env
API 密钥
请求的函数同样需要修改,找到(src/store/business/index.ts)的 createAssistantWriterStylized
函数,可以发现默认会调用 spark
模型接口
改成你需要的模型接口调用即可:
1. Spark 星火认知大模型:
APIKey
和 APISecret
密钥用冒号 :
拼接填入到 .env
文件中的 VITE_SPARK_KEY
环境变量2. SiliconFlow 大模型:
.env
文件中的 VITE_SILICONFLOW_KEY
环境变量Ollama3 大模型:
ollama run llama3
, 运行后确保其在 http://localhost:11434
运行ollama list
命令可查看当前正在运行的 Ollama 模型由于不同大模型的响应结果结构有所差异,本项目封装了一个 model
字段,用于控制响应结果的转换和字段提取。
standard
spark
ollama3
siliconflow
model
props 属性,根据不同模型类型处理流式响应,详见代码在使用 MarkdownPreview
组件时,通过设置 model
属性来指定当前使用的大模型类型:
<MarkdownPreview
v-model:reader="outputTextReader"
:model="defaultLLMTypeName"
@failed="onFailedReader"
@completed="onCompletedReader"
/>
其中 defaultLLMTypeName
会根据映射自动选择对应的模型(也可具体指定一个模型):
const defaultLLMTypeName: TransformStreamModelTypes = isMockDevelopment
? 'standard'
: 'spark'
默认情况下,会处理 spark
模型,在模拟开发环境下,使用 standard 模型。具体的模型类型可以根据需求进行配置。
defaultLLMTypeName
会根据模型映射自动选择合适的模型,也可以手动指定模型如果后端返回的是可直接渲染的纯字符串(而非 JSON),standard 模型将适用于所有这种情况
如果你喜欢这个项目或发现有用,可以点右上角 Star
支持一下,你的支持是我们不断改进的动力,感谢! ^_^