mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-22 00:47:45 +08:00
fix: align tool call protocol and thinking controls
This commit is contained in:
@@ -96,6 +96,7 @@ DS2API 当前的核心思路,不是把客户端传来的 `messages`、`tools`
|
||||
- `prompt` 才是对话上下文主载体。
|
||||
- `ref_file_ids` 只承载文件引用,不承载普通文本消息。
|
||||
- `tools` 不会作为“原生工具 schema”直接下发给下游,而是被改写进 `prompt`。
|
||||
- 客户端显式传入的 thinking / reasoning 开关会被归一到下游 `thinking_enabled`;关闭时即使上游返回 `response/thinking_content`,兼容层也不会把它当作可见正文输出。
|
||||
|
||||
## 5. prompt 是怎么拼出来的
|
||||
|
||||
@@ -178,16 +179,15 @@ assistant 的 reasoning 会变成一个显式标签块:
|
||||
assistant 历史 `tool_calls` 不会保留成 OpenAI 原生 JSON,而会转成 prompt 可见的 XML:
|
||||
|
||||
```xml
|
||||
<tools>
|
||||
<tool_call>
|
||||
<tool_name>read_file</tool_name>
|
||||
<param>
|
||||
<path><![CDATA[src/main.go]]></path>
|
||||
</param>
|
||||
</tool_call>
|
||||
</tools>
|
||||
<tool_calls>
|
||||
<invoke name="read_file">
|
||||
<parameter name="path"><![CDATA[src/main.go]]></parameter>
|
||||
</invoke>
|
||||
</tool_calls>
|
||||
```
|
||||
|
||||
这也是当前项目里唯一受支持的 canonical tool-calling 形态;其他形态都会作为普通文本保留,不会作为可执行调用语法。
|
||||
|
||||
这件事很重要,因为它决定了:
|
||||
|
||||
- 历史工具调用在 prompt 中是“可见文本历史”
|
||||
@@ -242,15 +242,17 @@ OpenAI 文件相关实现:
|
||||
|
||||
1. 旧历史消息被切出去。
|
||||
2. 旧历史会被重新序列化成一个文本文件。
|
||||
3. 文件名固定是 `IGNORE`。
|
||||
4. 该文件上传后,其 `file_id` 会排在 `ref_file_ids` 最前面。
|
||||
5. live prompt 只保留:
|
||||
3. 真正上传的文件名固定是 `HISTORY.txt`。
|
||||
4. 文件内容内部会使用 `IGNORE` 这层包装名来闭合 DeepSeek 官网原生文件标记。
|
||||
5. 该文件上传后,其 `file_id` 会排在 `ref_file_ids` 最前面。
|
||||
6. live prompt 只保留:
|
||||
- system / developer
|
||||
- 最新 user turn 起的上下文
|
||||
|
||||
历史文件内容不是普通自由文本,而是用同一套角色标记再次序列化出的 transcript:
|
||||
|
||||
```text
|
||||
[uploaded filename]: HISTORY.txt
|
||||
[file content end]
|
||||
|
||||
<|begin▁of▁sentence|><|User|>...<|Assistant|>...<|Tool|>...
|
||||
|
||||
Reference in New Issue
Block a user