bricks/docs/ai.old/llm.md
2025-11-18 14:59:26 +08:00

118 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

以下是根据你提供的源码和文档规范,为 `bricks.LlmIO` 控件编写的 **Markdown 格式控件文档示例**。由于源码中注册了多个控件(如 `LlmMsgAudio`, `ModelOutput`, `LlmModel`, `LlmIO`),我们以 **`LlmIO` 为主控件进行完整示例编写**,其他控件可依此模板类推。
---
# LlmIO
用于构建多模型语言模型输入输出交互界面的容器控件支持动态添加语言模型、配置知识库KDB、输入数据并分发给各模型处理适用于聊天机器人、AI助手等场景。
类型:**容器控件**,继承自 `bricks.VBox`
## 主要方法
| 方法名 | 说明 |
|-------|------|
| `show_added_model(m)` | 将指定模型配置对象渲染为 `LlmModel` 实例并显示在顶部标题栏 |
| `open_search_models(event)` | 打开弹窗,通过 `Cols` 组件加载可用模型列表供用户选择 |
| `add_new_model(event)` | 处理模型选择事件,将新模型加入 `this.models` 并调用 `show_added_model` 显示 |
| `setup_kdb(event)` | 打开知识库配置弹窗,允许用户设置 KDB 参数及提示词模板 |
| `handle_kdb_setup(event)` | 接收表单提交的 KDB 配置并保存到 `this.kdb_setting` |
| `open_input_widget(event)` | 打开输入表单弹窗,供用户填写输入内容 |
| `handle_input(event)` | 处理输入提交,广播输入数据到所有已加载的 `LlmModel` 实例 |
| `show_input(params)` | 在输出区域显示用户的输入内容卡片 |
## 主要事件
| 事件名 | 触发时机 | 携带参数 |
|--------|---------|----------|
| `record_click` (来自 `Cols`) | 用户点击模型记录行时触发 | 包含所选模型信息的 `event.params` |
| `submit` (来自 `Form`) | 输入或 KDB 表单提交时触发 | `event.params` 为表单数据对象 |
## 源码例子
```json
{
"widgettype": "LlmIO",
"id": "llm_container",
"options": {
"user_icon": "/static/imgs/user-avatar.svg",
"tts_url": "/api/tts/stream",
"estimate_url": "/api/feedback/submit",
"get_kdb_url": "/api/kdb/list",
"list_models_url": "/api/models/search",
"enabled_kdb": true,
"input_fields": [
{
"name": "prompt",
"label": "请输入问题",
"uitype": "textarea",
"required": true
},
{
"name": "session_id",
"label": "会话ID",
"uitype": "text",
"value": ""
}
],
"models": [
{
"llmid": "gpt-4o-mini",
"modelname": "GPT-4o Mini",
"model": "gpt-4o-mini",
"icon": "/static/imgs/gpt.svg",
"url": "/api/llm/chat/stream",
"response_mode": "stream",
"input_from": "prompt"
}
]
},
"subwidgets": [],
"binds": []
}
```
> 💡 **注释说明:**
>
> - `widgettype`: 必须是已注册的控件名,此处为 `LlmIO`
> - `id`: 唯一标识该组件实例,便于事件绑定与查找
> - `options`:
> - `user_icon`: 用户头像图标路径
> - `tts_url`: 文转语音服务接口地址(启用语音功能)
> - `estimate_url`: 用户反馈评分提交地址(点赞/点踩)
> - `get_kdb_url`: 获取知识库列表的 API 地址
> - `list_models_url`: 模型搜索接口,返回可添加的模型列表
> - `enabled_kdb`: 是否启用知识库增强功能
> - `input_fields`: 定义输入表单字段结构,使用 `Form` 控件渲染
> - `models`: 初始加载的语言模型数组,每个对象对应一个 `LlmModel`
> - `subwidgets`: 虽然是容器控件,但内部布局由 JS 构建,通常留空
> - `binds`: 此控件自身不直接绑定外部事件,事件由子控件(如按钮)触发
---
### ✅ 使用场景说明
该控件适合构建如下界面:
- 支持多模型对比回答的 AI 助手前端
- 可扩展模型的知识问答系统
- 集成 TTS 语音播报和用户反馈机制
- 支持外接知识库检索与提示工程优化
通过远程 `urlwidget` 加载此 JSON 即可动态嵌入页面:
```json
{
"widgettype": "urlwidget",
"options": {
"url": "/ui/components/llmio.ui"
},
"target": "main_content"
}
```
---
> ⚙️ 提示:若需启用语音朗读,确保服务器提供 `/api/tts/stream` 流式音频接口;若使用反馈功能,请实现 `estimate_url` 接口接收 `logid` 和 `value`1=满意,-1=不满意)
---
如需继续编写其他控件(如 `ModelOutput`, `LlmModel`, `LlmMsgAudio`)的文档,请告知,我可以按相同格式逐个生成。