Skip to content

智能对话

用自然语言或上传材料收集估值字段。字段齐备后收到 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齐备前至少要有
房产PROPERTYcityaddressbuildingAreapropertyUsage
车辆VEHICLEprovinceregistrationDate(车型建议补全)
土地LANDcitylocationlandNolandAreaplotRatiolandNature
设备EQUIPMENTmodelmanufactureDateYYYY-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

字段类型说明
idnumber会话 ID
titlestring标题
assetTypestring | null锁定类型后才有
statusstringACTIVE
valuationNosstring[]关联估值编号
createdAt / updatedAtstring时间

会话列表

参数位置类型必填说明
limitqueryinteger默认 20

会话详情 data

字段类型说明
idnumber会话 ID
titlestring标题
assetTypestring | null资产类型
statusstring状态
contextobject见下表
messagesobject[]idrolecontentcreatedAt
valuationIdsnumber[]已关联估值任务 ID
createdAt / updatedAtstring时间

context

字段类型说明
assetTypestring当前资产类型
fieldsobject已收集字段
missingFieldsstring[]仍缺字段
materialRef / materialFileNamestring材料
readyToValueboolean是否可发起估值
valuationIdsnumber[]估值任务 ID

流式发消息

POST /api/open/v1/chat-sessions/{id}/messages/stream
Content-Type: application/json
Accept: text/event-stream

请求体

字段类型必填说明
contentstring用户文本。可为空串,但通常应有说明
materialRefstringOCR / 上传返回
materialFileNamestring材料文件名
ocrAssetTypestringPROPERTY / VEHICLE / LAND / EQUIPMENT / BANK_STATEMENT
ocrFieldsobjectOCR 字段,直接合并进上下文

示例

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/ocr
Content-Type: multipart/form-data

字段位置类型必填说明
assetTypequerystringPROPERTY / VEHICLE / LAND / EQUIPMENT
fileformfile单文件

响应 data

字段类型说明
assetTypestring与请求一致
materialFileNamestring文件名
materialRefstring写入对话 / 估值的引用
ocrFieldsobject抽取字段。设备常见:modelmanufactureDatemanufacturerequipmentConfig
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/materialsfiles 多文件),不要走 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

Asset-AI 接口文档