Appearance
智能对话
用自然语言或上传材料收集估值字段。字段齐备后收到 ready_to_value,再调用对应开放估值接口创建任务(建议传 source: "CHAT" + chatSessionId)。
对话本身不扣估值费;真正扣费发生在后续 POST /{asset}-valuations(或 stream)。
流程
创建会话
→(可选)材料 OCR / 流水上传
→ POST .../messages/stream
→ SSE:reply / fields_update / missing_fields / ready_to_value
→ POST /api/open/v1/{asset}-valuations(带 source、chatSessionId)各资产必填字段与估值入参一致,见 接口参考。对话侧硬性校验示例:
| 资产 | assetType | 齐备前至少要有 |
|---|---|---|
| 房产 | PROPERTY | city、address、buildingArea、propertyUsage |
| 车辆 | VEHICLE | province、registrationDate(车型建议补全) |
| 土地 | LAND | city、location、landNo、landArea、plotRatio、landNature |
| 设备 | EQUIPMENT | model、manufactureDate(YYYY-MM) |
| 银行流水 | BANK_STATEMENT | 还款参数 + materials |
接口一览
| 方法 | 路径 | 说明 |
|---|---|---|
POST | /api/open/v1/chat-sessions | 创建会话,无请求体 |
GET | /api/open/v1/chat-sessions?limit=20 | 会话列表 |
GET | /api/open/v1/chat-sessions/{id} | 会话详情(含 context、messages) |
POST | /api/open/v1/chat-sessions/{id}/messages/stream | 流式发消息(SSE) |
POST | /api/open/v1/chat-sessions/materials/ocr | 房产/车辆/土地/设备 OCR |
POST | /api/open/v1/chat-sessions/materials | 银行流水材料上传 |
创建会话
无 Body。响应 data:
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 会话 ID |
title | string | 标题 |
assetType | string | null | 锁定类型后才有 |
status | string | 如 ACTIVE |
valuationNos | string[] | 关联估值编号 |
createdAt / updatedAt | string | 时间 |
会话列表
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
limit | query | integer | 否 | 默认 20 |
会话详情 data
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 会话 ID |
title | string | 标题 |
assetType | string | null | 资产类型 |
status | string | 状态 |
context | object | 见下表 |
messages | object[] | id、role、content、createdAt |
valuationIds | number[] | 已关联估值任务 ID |
createdAt / updatedAt | string | 时间 |
context:
| 字段 | 类型 | 说明 |
|---|---|---|
assetType | string | 当前资产类型 |
fields | object | 已收集字段 |
missingFields | string[] | 仍缺字段 |
materialRef / materialFileName | string | 材料 |
readyToValue | boolean | 是否可发起估值 |
valuationIds | number[] | 估值任务 ID |
流式发消息
POST /api/open/v1/chat-sessions/{id}/messages/streamContent-Type: application/jsonAccept: text/event-stream
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
content | string | 是 | 用户文本。可为空串,但通常应有说明 |
materialRef | string | 否 | OCR / 上传返回 |
materialFileName | string | 否 | 材料文件名 |
ocrAssetType | string | 否 | PROPERTY / VEHICLE / LAND / EQUIPMENT / BANK_STATEMENT |
ocrFields | object | 否 | OCR 字段,直接合并进上下文 |
示例
bash
curl -N -X POST "http://localhost:8080/api/open/v1/chat-sessions/123/messages/stream" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "X-Api-Key: aai_你的密钥" \
-d '{
"content": "帮我估一台汽车起重机,型号 STC200,2021 年 6 月出厂,厂家徐工"
}'带 OCR:
json
{
"content": "已上传设备铭牌,请核对字段",
"materialRef": "uuid.jpg",
"materialFileName": "铭牌.jpg",
"ocrAssetType": "EQUIPMENT",
"ocrFields": {
"model": "STC200",
"manufactureDate": "2021-06",
"manufacturer": "徐工"
}
}SSE 事件
| type | 含义 | payload 要点 |
|---|---|---|
reply | 助手回复 | status: start / delta / end;delta 文本增量 |
fields_update | 已识别字段 | fields、材料引用等 |
missing_fields | 仍缺字段 | fields: string[] |
ready_to_value | 可发起估值 | input 为估值入参快照;assetType |
error | 失败 | message |
done | 结束 | 或 data:[DONE] |
收到 ready_to_value 后,用 input 调用对应估值 API,并附加:
json
{
"source": "CHAT",
"chatSessionId": 123
}设备示例:POST /api/open/v1/equipment-valuations,入参见 设备估值。
材料 OCR
POST /api/open/v1/chat-sessions/materials/ocrContent-Type: multipart/form-data
| 字段 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
assetType | query | string | 是 | PROPERTY / VEHICLE / LAND / EQUIPMENT |
file | form | file | 是 | 单文件 |
响应 data:
| 字段 | 类型 | 说明 |
|---|---|---|
assetType | string | 与请求一致 |
materialFileName | string | 文件名 |
materialRef | string | 写入对话 / 估值的引用 |
ocrFields | object | 抽取字段。设备常见:model、manufactureDate、manufacturer、equipmentConfig |
bash
curl -s -X POST "http://localhost:8080/api/open/v1/chat-sessions/materials/ocr?assetType=EQUIPMENT" \
-H "X-Api-Key: aai_你的密钥" \
-F "file=@./nameplate.jpg"银行流水请用 POST /api/open/v1/chat-sessions/materials(files 多文件),不要走 OCR 接口。
SDK 完整示例
ts
import { AssetAiClient } from "asset-ai-open-sdk";
const client = new AssetAiClient({
baseUrl: "https://your-api-host",
apiKey: "aai_...",
});
const session = await client.chat.create();
// 文本收集
const turn = await client.chat.sendMessage(session.id, {
content: "帮我估一下深圳南山区某某小区 89 平住宅",
});
if (turn.readyToValue && turn.input) {
await client.property.valuate({
...(turn.input as any),
source: "CHAT",
chatSessionId: session.id,
});
}
// 设备:OCR → 对话 → 估值
const ocr = await client.chat.ocrMaterial("EQUIPMENT", {
fileName: "铭牌.jpg",
data: nameplateBlob,
});
const eqTurn = await client.chat.sendMessage(session.id, {
content: `已上传材料:${ocr.materialFileName}`,
materialRef: ocr.materialRef,
materialFileName: ocr.materialFileName,
ocrAssetType: ocr.assetType,
ocrFields: ocr.ocrFields,
});
if (eqTurn.readyToValue && eqTurn.input) {
await client.equipment.valuate({
...(eqTurn.input as any),
source: "CHAT",
chatSessionId: session.id,
});
}机器可读契约见仓库 docs/api/openapi-open.yaml。