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 字段还接受 ws、wss 或 websocket 作为值。