Playground
在网页界面中与目录里的任意模型对话:保存、搜索和归档对话,附加图片与文件,编辑问题、重试和分支回复,使用斜杠命令,通过上下文压缩让长对话继续下去,以及把回复复制为 API 请求。
Playground 是网页界面内置的聊天应用。它和客户端走同一个网关调用模型,所以是试用模型、检查账号、查看请求实际内容的最快方式。对话保存在服务端的数据目录中,关掉页面、重启进程都不会丢,换一个浏览器打开也能接着用。
本页介绍聊天本身。让模型读取文件、运行命令、搜索网页见 Playground 工具;页面背后的 HTTP 接口见 Playground API。
开始对话
打开 Playground
在导航中选择 Playground。页面会打开你上次打开的对话(不论在哪个浏览器),没有时显示一个空对话。
选择模型
输入框中的 模型 菜单列出服务端提供的全部模型,列表较长时可以输入关键字搜索。还没选过模型时默认选第一个。也可以在模型页对某个模型选择在 Playground 中试用,这会用该模型开始一个新对话。
提问
在输入框中输入内容,按 Enter。对话随第一条消息在服务端创建,回复以流式显示。
窗口较宽时,对话列表显示在对话旁边;较窄时以抽屉形式滑出,用页头开头的按钮打开或关闭。页头末尾的按钮用于开始下一个对话:显示 新对话;如果当前是一个还没写过内容的新对话,则显示 临时对话。
| 按键 | 作用 |
|---|---|
| Enter | 发送 |
| Shift+Enter | 换行 |
| Esc | 停止正在生成的回复 |
| 输入框为空时按 ↑ | 编辑你的上一个问题 |
| 在输入框开头输入 / | 打开命令菜单 |
| Ctrl+Shift+O(macOS 上为 Cmd) | 新对话 |
按 停止(或 Esc)会结束回复,已生成的内容会保留,回复标记为 已停止。离开页面的效果相同。
命令
在输入框开头输入 /,输入框上方会打开命令菜单。继续输入可以筛选(输入 /co 只剩 /compact 和 /status,匹配的字母加粗显示)。↑、↓ 移动,Tab 补全命令名,Enter 执行,Esc 关闭菜单,直到你改动输入的内容。需要从列表中选择的命令,在命令名后输入空格即打开列表,后面的文字用于筛选:输入 /model gpt 再按 Enter,选中第一个匹配项。
| 命令 | 作用 |
|---|---|
/model | 为此对话选择模型 |
/effort | 选择推理强度(仅限有档位的模型) |
/compact 要保留的重点 | 立即压缩对话(见上下文与压缩);命令后的文字告诉总结要关注什么 |
/status | 上下文窗口的已用与剩余、上次请求和整个对话的 token 数(含缓存命中)、压缩次数、回复用时以及工具 |
/new(或 /clear) | 开始新对话 |
/fork 标题 | 在新对话中继续此对话,截至屏幕上的消息;命令后的文字作为新对话的标题 |
/tools | 开启或关闭此对话的工具 |
/permissions(或 /approval) | 选择工具运行前何时询问 |
回复进行中时,只有 /status、/permissions 和 /new 可以执行,其他命令会说明原因。斜杠后面跟的不是命令时(例如 /etc/hosts),会作为普通消息发送。
临时对话
在一个空的新对话中,页头按钮显示为 临时对话。临时对话和普通对话用法一样,但是:
- 不会出现在对话列表中,也不会被自动命名;
- 一离开(打开其他对话或开始新对话)就被删除,遗留下来的会在服务下次启动时删除;
- 没有对话菜单,也没有 在新对话中分支。
处于临时对话时,输入框提示“有问题,尽管问(此对话不会保存)”。
对话列表
对话按最近使用时间分组:今天、昨天、过去 7 天、过去 30 天 和 更早。从其他对话分支出来的对话带有分支图标。
- 搜索对话:边输入边按标题筛选列表。
- 每个对话都有一个菜单(对话选项,即
…按钮),包含 重命名、归档 和 删除。当前打开的对话在页头也有同样的菜单。 - 重命名:设置你自己的标题,之后不会再被自动生成的标题替换。
- 归档:把对话收起来而不删除。列表底部的 已归档的对话 显示归档内容;在其中选 恢复 可以取回对话,在已归档的对话中发送新消息也会让它回到列表。返回对话列表 回到普通列表。归档当前打开的对话会开始一个新对话。
- 删除:先确认,然后永久删除对话、其全部消息以及只属于它的附件,并停止它的工具启动的所有后台命令。
标题
在模型为对话命名之前,对话以第一个问题作为标题(最多 80 个字符)。第一条回复完成后,由模型用不超过六个词、以你提问所用的语言为对话命名。由哪个模型命名取决于 标题模型 设置(见下文的 Playground 设置),默认使用对话自身的模型。命名的模型调用失败时,第一个问题继续作为标题。用 重命名 设置的标题会一直保留。
模型与推理强度
模型和推理强度在输入框中选择,并随对话保存,重新打开对话时会恢复。回复生成期间这两个菜单不可更改。
- 模型:服务端提供的任意模型。换模型时推理强度会重置为自动。
- 推理强度:只有支持推理级别的模型才显示。自动(服务端默认) 不发送级别,由模型和供应商决定;选择其他项则作为请求的
reasoning_effort发送。各供应商如何对应这些级别见模型行为。
附件
点 添加图片和文件(+ 按钮)、把文件拖放到对话区域,或直接粘贴到输入框。每个文件会立即上传,显示在文本上方;发送前可以点关闭按钮移除。消息可以只有附件、没有文字。
| 类型 | 支持的文件 | 发送方式 |
|---|---|---|
| 图片 | PNG、JPEG、WebP、GIF | 作为图片发送。最长边超过 2048 像素的图片会在浏览器中缩小(并重新编码为 WebP 或 JPEG);尺寸不超限且小于 1 MB 的图片,以及尺寸不超限的 GIF,按原样发送 |
| 文本文件 | 任意 text/* 类型、JSON、XML、YAML、TOML、SQL、shell 脚本,以及按扩展名识别的源代码等文件(.py、.ts、.vue、.rs、.go、.md、.csv、.log、.diff 等) | 以文件名为标记、作为文字嵌入你的消息。最多可附加 2,000,000 个字符;发给模型的是前 200,000 个字符,并告诉模型其余部分已截断 |
| 带文字层的 PDF | 在浏览器中逐页提取文字,再作为文本文件发送。没有文字的扫描版 PDF 会被拒绝 |
其他文件会被拒绝,并提示“请发送图片、文本文件或 PDF”。上传后一直没有发送的附件会在一天后删除。附件只存一份,分支之间共享,分支对话不会复制附件。
模型无法读取图片时
能读取图片的模型直接收到图片。对于不能读取图片的模型(目录中标记为不支持视觉),Playground 会请另一个模型描述每张图片,并用描述代替图片发送:
- 给这类模型附加图片时,输入框上方会提示“此模型无法读取图片,将由另一个模型描述图片。”
- 生成描述期间,回复处显示“正在用 模型 读取图片…”。
- 回复下方会注明哪张图片由哪个模型描述。描述与图片一起保存,只需生成一次,之后的每轮对话都不会再请求。
由哪个模型描述图片取决于 图片模型 设置。自动 选择目录中第一个能读取图片的模型,跳过上一次可用性探测判定为不可用或受地区限制的模型。关闭 则从不请求描述:图片会被略去,回复中会说明。也可以指定一个模型。
如果一个标记为能读取图片的模型因为图片被其站点拒绝,回复会改用描述再试一次,并附注说明。
推理过程
对于会展示推理过程的模型,回复开头有一行折叠的标题:推理期间显示 正在思考… 和已用时间,开始作答后显示 已思考 时长。点击这一行即可展开推理内容,展开状态会保持。不返回推理内容的模型没有这一行。
编辑、重试与版本
对话是一棵树:编辑问题或重试回复都会在原消息旁边新增一个版本,新旧版本都可以查看。
- 编辑消息(在问题上,或在空输入框中按 ↑ 编辑上一个问题)会在原位置打开问题。修改文字、移除附件,然后点 发送(或按 Enter;Esc 取消)。修改后的内容成为这个问题的新版本,并重新获得回复;旧版本后面的内容仍留在旧版本下。
- 重试(在回复上)为同一个问题再要一条回复,使用输入框中当前选择的模型和推理强度。先换模型再重试,就可以在同一个问题上比较不同模型。失败的回复在错误信息旁也有 重试。
- 有多个版本的消息会显示 上一个版本、n / 总数 和 下一个版本。切换到另一个版本时,会同时显示该版本下最新的回复。屏幕上显示的版本会随对话保存。
回复生成期间不能编辑、重试或切换版本。
分支对话
在新对话中分支(在回复上)会把对话截至这条回复的内容复制到一个新对话并打开它(提示“已在新对话中打开”)。新对话沿用标题、模型和推理强度,以及原对话的工具和审批设置;原对话保持不变。想让一段对话朝两个方向发展、又不想来回切换版本时,可以用它。
复制为 API 请求
在回复的 更多操作 中,复制为 API 请求 会复制一条 curl 命令,通过网关的公开 API 发送同样的 Chat Completions 请求:
curl http://127.0.0.1:10600/v1/chat/completions \
-H "Authorization: Bearer $HOSHIMI_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<'JSON'
{
"model": "your-model",
"messages": [
{"role": "system", "content": "Answer briefly."},
{"role": "user", "content": "Summarise this file.\n\n<file name=\"notes.txt\">\n...\n</file>"}
],
"stream": true
}
JSON请求体由服务端按这条回复当时的发送方式生成:系统提示词在最前,文件内容嵌入消息,图片为 data: URL(对不能读图的模型则是图片描述),选择了推理强度时带上 reasoning_effort,对话开启了工具时附带工具定义和 tool_choice。对于使用了工具的回复,复制的是第一轮的请求。把 HOSHIMI_API_KEY 设为你的模型 API 密钥;服务端没有设置模型 API 密钥时可以去掉这个请求头(见访问与安全)。
消息上的 复制 复制消息文字,代码块上的 复制代码 只复制代码。
上下文与压缩
每个模型都有上下文窗口:一次能读取多少对话内容。发送按钮旁的圆环显示剩余比例;点击它或输入 /status 查看详情。窗口大小取自模型所在站点的列表;如果站点以请求过长为由拒绝并给出实际上限,之后就按这个上限计算。
对话接近窗口上限时会被压缩:由模型为此前的对话撰写一份总结(目标、决定及原因、已完成与待完成的工作、涉及的文件、下一步),此后模型读取这份总结(以及逐字保留的你最近的几条消息),而不再读取之前的全部内容。对话本身仍完整显示在屏幕上,压缩的位置会有一条分隔线,点击即可查看总结。
以下情况会压缩对话:
- 回复开始时:对话达到窗口的 85%(
playground.compact_threshold),或剩余空间已不足以容纳回复; - 回复的两轮工具调用之间:让长时间运行的智能体任务得以继续;
- 模型以请求过长为由拒绝时:压缩对话后重新发送请求;仍然过长时,再截短较长的工具输出发送一次。即使关闭了自动压缩也会这样处理;
- 你输入
/compact时,后面可以写上总结应保留的内容。
压缩失败时对话保持原样。编辑压缩点之前的问题,或从那里分支,会回到完整的对话。
回复用时
回复进行时,底部一行会显示它正在做什么(撰写、运行工具、压缩上下文)以及已用时间,每秒更新。工具调用等待你批准时计时暂停。回复结束后,操作按钮旁会保留 用时 1m 23s(或 … 后停止、… 后失败);鼠标悬停可查看开始和结束时间。
回复的结束状态
| 显示内容 | 含义 |
|---|---|
| 已停止 | 你停止了回复,或页面已离开;已生成的文字会保留 |
| 此回复失败。 及原因 | 模型或站点返回了错误;点 重试 再试 |
| “……图片已由……描述后发送” | 不能读图的模型收到的是图片描述 |
| “图片……已略去:没有可读取它的模型” | 没有可用的描述模型,或 图片模型 设为 关闭 |
| “……拒绝了图片,因此改为发送图片描述” | 站点拒绝了图片,回复已改用描述重试 |
| 回复上方的 上下文已压缩 | 在此回复之前压缩了对话(见上下文与压缩) |
| “The conversation no longer fits in …'s context window, even compacted.” | 即使压缩后对话仍然过长:请开始新对话,或从更早的消息分支 |
与工具有关的提示(模型不支持调用工具、达到轮数上限)见 Playground 工具。
Playground 设置
Playground 自身的设置位于 设置 › 常规 › Playground(见设置),对应 config.json 中的 playground(见 config.json):
| 设置 | 配置项 | 默认值 | 作用 |
|---|---|---|---|
| 系统提示词 | playground.system_prompt | 空 | 从下一条消息起,作为每个 Playground 对话的第一条消息发送。留空则不发送 |
| 标题模型 | playground.title_model | 空(对话自身使用的模型) | 在新对话收到第一条回复后为其命名的模型 |
| 图片模型 | playground.vision_model | auto(自动) | 为不能读取图片的模型描述图片:auto、off 或某个模型 ID |
| 自动压缩长对话 | playground.auto_compact | true | 对话接近窗口上限时自动压缩。被拒绝为过长的请求无论如何都会压缩 |
| 压缩阈值 | playground.compact_threshold | 0.85 | 对话达到窗口的多大比例(0.5 到 0.95)时压缩 |
| 总结模型 | playground.compact_model | 空(对话自身使用的模型) | 撰写总结的模型 |
{
"playground": {
"system_prompt": "Answer briefly.",
"title_model": "your-small-model",
"vision_model": "auto",
"auto_compact": true,
"compact_threshold": 0.85,
"compact_model": ""
}
}工具相关的设置(playground.tools、workspace、approval、max_steps、search_url)见 Playground 工具。
对话保存在哪里
对话、消息和附件保存在数据目录的 hoshimi.db 中(见数据目录与路径),直到你删除为止。上次打开的对话也记录在这里,因此在任何浏览器中打开 Playground 都能回到它。服务停止时被中断的回复会保存为已停止。
Playground 发起的每次模型调用都会像其他调用一样记录在用量中,并带有各自的来源:回复为 playground,命名标题为 playground-title,描述图片为 playground-vision,压缩总结为 playground-compact。