Liking cljdoc? Tell your friends :D

im.ttalk.agent.model.request

ChatRequest —— 发往 ChatModel 的一次调用请求

对标 Spring AI 的 Prompt(List<Message>, ChatOptions):消息 + 选项两段, 没有第三样东西。wire 级参数(:tools / :tool-choice / :system-prompt / :model / :max-tokens / provider 私有键…)一律进 :options——它们的共同点 是「会影响这一次 HTTP 请求长什么样」,而 :messages 是内容本身。

为什么是叶子 ns:chat-model 要它(作为入参)、filter 要它(ChatClientRequest 裹着它)、chat-client 要它(在 terminal 组装)。放在任何一个里面都会给另外两个 造出反向依赖,故单独成 ns,只依赖 clojure.core。

与 ChatClientRequest 的分工(两层,别混):

ChatClientRequest{:request ChatRequest, :context Context} ← filter 洋葱链看到的 ChatRequest{:messages [...], :options {...}} ← ChatModel 看到的

filter 链层多出来的那一样是 :context(请求级共享状态,只读)——它不下发给 provider,所以不能混进 ChatRequest。这正是 Spring 把 ChatClientRequest 与 Prompt 分成两个类的理由。

构造走 chat-request / as-chat-request;as-chat-request 收 map 字面量并 归一化成 record(与 filter/as-filter 同一套手法——用户侧照旧写 map,装配期 / 入口处转一次)。

ChatRequest —— 发往 ChatModel 的一次调用请求

对标 Spring AI 的 `Prompt(List<Message>, ChatOptions)`:**消息 + 选项**两段,
没有第三样东西。wire 级参数(`:tools` / `:tool-choice` / `:system-prompt` /
`:model` / `:max-tokens` / provider 私有键…)一律进 `:options`——它们的共同点
是「会影响这一次 HTTP 请求长什么样」,而 `:messages` 是内容本身。

**为什么是叶子 ns**:`chat-model` 要它(作为入参)、`filter` 要它(`ChatClientRequest`
裹着它)、`chat-client` 要它(在 terminal 组装)。放在任何一个里面都会给另外两个
造出反向依赖,故单独成 ns,只依赖 `clojure.core`。

**与 `ChatClientRequest` 的分工**(两层,别混):

  ChatClientRequest{:request ChatRequest, :context Context}   ← filter 洋葱链看到的
  ChatRequest{:messages [...], :options {...}}                ← ChatModel 看到的

filter 链层多出来的那一样是 `:context`(请求级共享状态,只读)——它**不下发给
provider**,所以不能混进 ChatRequest。这正是 Spring 把 `ChatClientRequest` 与
`Prompt` 分成两个类的理由。

构造走 `chat-request` / `as-chat-request`;`as-chat-request` 收 map 字面量并
归一化成 record(与 `filter/as-filter` 同一套手法——用户侧照旧写 map,装配期
/ 入口处转一次)。
raw docstring

as-chat-requestclj

(as-chat-request x)

归一化成 ChatRequest:已是 record 则原样返回,map 则转换。

接受两种 map 写法:

  • 嵌套:{:messages [...] :options {...}}
  • 扁平:{:messages [...] :tools [...] :tool-choice :auto :system-prompt "..."} —— 除 :messages 外的键全部收进 :options。扁平写法是为了让调用方 不必为了传一个 :tools 而多敲一层。
归一化成 ChatRequest:已是 record 则原样返回,map 则转换。

接受两种 map 写法:
- 嵌套:{:messages [...] :options {...}}
- 扁平:{:messages [...] :tools [...] :tool-choice :auto :system-prompt "..."}
  —— 除 :messages 外的键**全部**收进 :options。扁平写法是为了让调用方
  不必为了传一个 :tools 而多敲一层。
sourceraw docstring

chat-requestclj

(chat-request messages)
(chat-request messages options)

构造 ChatRequest。

参数:

  • messages: 中立消息列表(本轮发给 provider 的全量消息)
  • options: 调用选项 map(可选,缺省 {})——:tools / :tool-choice / :system-prompt / :model / :max-tokens / provider 私有键

返回: ChatRequest record

构造 ChatRequest。

参数:
- messages: 中立消息列表(本轮发给 provider 的全量消息)
- options:  调用选项 map(可选,缺省 {})——:tools / :tool-choice /
            :system-prompt / :model / :max-tokens / provider 私有键

返回: ChatRequest record
sourceraw docstring

chat-request?clj

(chat-request? x)

是否为 ChatRequest record(map 字面量不算——归一化前后要分得清)。

是否为 ChatRequest record(map 字面量不算——归一化前后要分得清)。
sourceraw docstring

optionclj

(option req k)
(option req k not-found)

读一个调用选项。

读一个调用选项。
sourceraw docstring

update-messagesclj

(update-messages req f & args)

以函数更新消息列表,返回新 ChatRequest。

以函数更新消息列表,返回新 ChatRequest。
sourceraw docstring

wire-optionsclj

(wire-options req)

下发给 provider 的调用选项::options 去掉值为 nil 的键。

只做去 nil,不筛白名单——provider 私有参数(Anthropic 的 :thinking、 :service-tier,MiniMax 的 :cache-strategy…)必须能原样穿过去, 见 docs/provider-variant-design.md §1.2 那条「递不到底」的 bug。

下发给 provider 的调用选项:`:options` 去掉值为 nil 的键。

**只做去 nil**,不筛白名单——provider 私有参数(Anthropic 的 `:thinking`、
`:service-tier`,MiniMax 的 `:cache-strategy`…)必须能原样穿过去,
见 `docs/provider-variant-design.md` §1.2 那条「递不到底」的 bug。
sourceraw docstring

with-messagesclj

(with-messages req messages)

换掉消息列表,返回新 ChatRequest。

换掉消息列表,返回新 ChatRequest。
sourceraw docstring

with-optionclj

(with-option req k v)

写一个调用选项,返回新 ChatRequest。

写一个调用选项,返回新 ChatRequest。
sourceraw docstring

with-optionsclj

(with-options req m)

合并一组调用选项,返回新 ChatRequest。

合并一组调用选项,返回新 ChatRequest。
sourceraw docstring

without-optionsclj

(without-options req & ks)

删除若干调用选项,返回新 ChatRequest。

删除若干调用选项,返回新 ChatRequest。
sourceraw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close