Skip to main content

WebSockets

WebSocket 提供程序允许您连接到 WebSocket 端点进行推理。这对于与支持 WebSocket 连接的服务器进行实时双向通信非常有用。

配置

要使用 WebSocket 提供程序,请将提供程序 id 设置为 websocket,并在 config 部分提供必要的配置。

providers:
- id: 'wss://example.com/ws'
config:
messageTemplate: '{"prompt": "{{prompt}}", "model": "{{model}}"}'
responseParser: 'data.output'
timeoutMs: 10000

配置选项

  • url(必填):要连接的 WebSocket URL。
  • messageTemplate(必填):通过 WebSocket 连接发送的消息模板。您可以使用 {{prompt}} 等占位符,这些占位符将被实际提示替换。
  • responseParser(可选):用于从 WebSocket 响应中提取所需输出的 JavaScript 代码片段或函数,给定 data 参数。如果未提供,则将整个响应用作输出。如果响应是有效的 JSON,则将返回对象。
  • timeoutMs(可选):WebSocket 连接的超时时间(以毫秒为单位)。默认值为 10000(10 秒)。

使用变量

您可以在 messageTemplate 中使用测试变量:

providers:
- id: 'wss://example.com/ws'
config:
messageTemplate: '{"prompt": "{{prompt}}", "model": "{{model}}", "language": "{{language}}"}'
responseParser: 'data.translation'

tests:
- vars:
model: 'gpt-4'
language: 'French'

解析响应

使用 responseParser 属性从 WebSocket 响应中提取特定值。例如:

providers:
- id: 'wss://example.com/ws'
config:
messageTemplate: '{"prompt": "{{prompt}}"}'
responseParser: 'data.choices[0].message.content'

此配置从类似于以下结构的响应中提取消息内容:

{
"choices": [
{
"message": {
"content": "This is the response."
}
}
]
}

作为库使用

如果您将 promptfoo 用作节点库,您可以提供等效的提供程序配置:

{
// ...
providers: [{
id: 'wss://example.com/ws',
config: {
messageTemplate: '{"prompt": "{{prompt}}"}',
responseParser: (data) => data.foobar,
timeoutMs: 15000,
}
}],
}

请注意,当使用 WebSocket 提供程序时,将为每个 API 调用打开连接,并在接收到响应或达到超时时关闭连接。

参考

支持的配置选项:

选项类型描述
url字符串要连接的 WebSocket URL。如果未提供,则将提供程序的 id 用作 URL。
messageTemplate字符串通过 WebSocket 连接发送的消息模板字符串。支持 Nunjucks 模板。
responseParser字符串 | 函数用于解析响应的函数或函数字符串表示。如果未提供,则将整个响应作为输出返回。
timeoutMs数字WebSocket 连接的超时时间(以毫秒为单位)。如果未指定,默认值为 10000(10 秒)。

注意:messageTemplate 支持 Nunjucks 模板,允许您使用 {{prompt}} 变量或测试上下文中传递的任何其他变量。

除了完整的 URL 外,提供程序 id 字段还接受 wswsswebsocket 作为值。