三条固定演示链路,覆盖 KnowledgeOps Agent 的全部核心能力。每条链路 3-5 分钟可完成。
展示能力:AgentWorkflowEngine → ResearchPlannerAgent → 混合检索 → EvidenceJudgeAgent → ReportWriterAgent
演示步骤:
# 1. 启动服务
./scripts/demo.sh
# 2. 创建研究任务
curl -X POST http://localhost:8080/ai/research/tasks \
-H "Content-Type: application/json" \
-H "X-Tenant-Id: public" \
-d '{
"topic": "2025年AI Agent在企業服務領域的應用趨勢",
"enableWebSearch": false,
"enableRagSearch": true,
"enableGraphSearch": true,
"maxSearchRounds": 3
}'
# 3. 查询任务状态与步骤
curl http://localhost:8080/ai/research/tasks/{taskId} \
-H "X-Tenant-Id: public"
# 4. 获取研究报告
curl http://localhost:8080/ai/research/tasks/{taskId}/report \
-H "X-Tenant-Id: public"验证点:
| 检查项 | 预期结果 |
|---|---|
| 任务创建 | 返回 taskId,status=CREATED→PLANNING→...→DONE |
| 主题拆解 | agent_step 中 ResearchPlannerAgent 输出 3-5 个子问题 |
| 检索召回 | 每个子问题触发混合检索(vector + keyword + graph) |
| 证据评分 | evidence 数组中每条记录带 relevanceScore/authorityScore/timelinessScore |
| 报告生成 | final_output 包含 Executive Summary、Key Findings、Detailed Analysis |
| 事件溯源 | GET /tasks/{taskId}/events 返回完整 STATE_CHANGED/STEP_STARTED/STEP_COMPLETED 序列 |
展示能力:tianji RouteAgent(结构化 JSON 意图识别)→ 9 种子 Agent → Tool Calling → KnowledgeOpsClient(RAG/记忆/图谱)→ SSE 全链路事件
演示步骤:
# 1. 启动 tianji(dev-demo 模式)
cd tianji-ai-agent
bash scripts/quick-start-mac.sh
# 2. 打开 http://localhost:5173
# 3. 依次输入以下问题:| 场景 | 输入 | 预期路由 | 预期事件 |
|---|---|---|---|
| 课程推荐 | "我零基础,想 3 个月入门 Java 后端,帮我推荐课程" | ROUTE→RECOMMEND | ROUTE(1004)→DATA(1001)→PARAM(1003)→STOP(1002) |
| 课程咨询 | "1589905661084430337 这门课适合谁,价格多少" | ROUTE→CONSULT | ROUTE→DATA→PARAM(courseInfo)→STOP |
| 预下单 | "我要购买课程 1589905661084430337,帮我生成确认订单" | ROUTE→BUY | ROUTE→DATA→PARAM(prePlaceOrder)→STOP |
| 知识问答 | "Java 中 Redis 缓存穿透是什么" | ROUTE→KNOWLEDGE | ROUTE→DATA→STOP |
| 转人工 | "我要投诉课程质量问题" | ROUTE→COMPLAINT 或 HUMAN_HANDOFF | ROUTE→DATA→STOP |
验证点:
| 检查项 | 预期结果 |
|---|---|
| 路由 JSON | RouteAgent 返回 {"intent":"BUY","confidence":0.91,"nextAgent":"BUY",...} |
| 卡片渲染 | 前端展示课程卡片、订单卡片、引用来源 |
| SSE 事件序列 | ROUTE→DATA→PARAM→STOP 完整链路 |
| 记忆命中 | 第二轮对话时 MEMORY 事件出现 |
展示能力:PDF 上传 → 异步入库 → VectorRetriever + KeywordRetriever + GraphRetriever → EvidenceJudgeService → CitationService
演示步骤:
# 1. 上传 PDF 到知识库
curl -X POST http://localhost:8080/ai/pdf/upload/demo-chat-1 \
-H "X-Tenant-Id: public" \
-F "file=@docs/assets/sample.pdf"
# 2. 等待入库完成(查询 ingestion job 状态)
curl http://localhost:8080/ingestion/jobs?chatId=demo-chat-1 \
-H "X-Tenant-Id: public"
# 3. 混合检索问答
curl -X POST http://localhost:8080/ai/rag/search \
-H "Content-Type: application/json" \
-H "X-Tenant-Id: public" \
-d '{
"prompt": "文档中提到的核心概念是什么",
"chatId": "demo-chat-1"
}'
# 4. 通过工作流接口(带 trace)
curl -X POST http://localhost:8080/ai/workflow/react/chat \
-H "Content-Type: application/json" \
-H "X-Tenant-Id: public" \
-d '{
"prompt": "文档中提到的核心概念是什么",
"chatId": "demo-chat-1",
"modelProfile": "balanced"
}'返回结构示例:
{
"answer": "根據文檔分析,核心概念包括...",
"citations": [
{"index": 1, "sourceType": "vector", "title": "sample.pdf", "confidence": 0.92}
],
"evidence": [
{
"sourceType": "vector",
"title": "sample.pdf",
"chunkId": "chunk-3",
"score": 0.86,
"relevanceScore": 0.92,
"authorityScore": 0.75,
"timelinessScore": 0.70,
"reason": "向量语义匹配,相关度92%,权威度75%,时效度70%"
}
],
"traceId": "trace-a1b2c3d4",
"memoryUsed": []
}验证点:
| 检查项 | 预期结果 |
|---|---|
| PDF 上传 | 返回 jobId,状态 pending→running→success |
| 向量检索 | VectorRetriever 返回 topK 文档,score>0.45 |
| 关键词检索 | KeywordRetriever 返回标题/内容关键词匹配结果 |
| 图谱检索 | GraphRetriever 返回 kg_entity 匹配实体和一跳邻居 |
| 融合去重 | HybridRetrievalService 合并四路结果并去重 |
| 证据评分 | 每条 evidence 带三维评分和中文理由 |
| 引用溯源 | citations 数组带 index/sourceType/chunkId/confidence |
| 工作流追踪 | agent_task→agent_step→agent_event 完整链路可查 |
| 场景 | 预期行为 |
|---|---|
| 知识库无匹配 | answer="没有在当前知识库中检索到可用内容",pipelineOutcome=empty |
| 模型超时 | Resilience4j TimeLimiter 触发,返回降级回答 |
| 工具调用失败 | observation 中 status=error,不阻断流程 |
| 用户中断生成 | SSE stream 在 STOP 事件后正常关闭 |
| 重复提交 | ingestion 幂等键去重,不重复入库 |