AutoGen

一、方案整体架构

![架构图示意] 用户层 → 接入层(WebSocket/HTTP) → 核心层(多智能体协作) → 数据层(MongoDB/Redis/RAG) - 核心目标:通过多智能体分工,实现“用户需求解析→房源数据库查询→结果整理→实时推送”全流程自动化,支持流式回答和会话记忆。 - 技术栈:AutoGen(多智能体)、LangChain(RAG/工具链)、Redis(会话记忆)、MongoDB(房源数据库)、FastAPI(接口层)、WebSocket(实时推送)。

二、核心组件设计

1. 接入层:用户交互与实时通信

2. 多智能体设计(AutoGen 核心)

设计 5 个智能体分工协作,通过 GroupChatManager 协调对话:

智能体角色 核心职责 依赖工具/模块
用户交互智能体 接收用户输入,引导补充需求(如预算、通勤范围),生成自然语言回复 Redis 会话记忆、LangChain 意图识别
需求解析智能体 将用户自然语言需求转为结构化查询条件(如 {"area":"浦东","rooms":2,"price":8000} LangChain 实体提取(地址/价格识别)
数据库查询智能体 调用 MongoDB 接口执行房源查询,处理查询结果(过滤/排序) LangChain MongoDB 工具、查询模板
结果整理智能体 将数据库返回的房源数据转为用户友好的自然语言描述(如“房源A:浦东张江,2室1厅,7500元/月”) 格式化模板、RAG 补充小区信息
推送协调智能体 监控数据库查询结果,触发 WebSocket 推送符合条件的房源(支持批量/单条推送) WebSocket 客户端工具、结果过滤规则
趋势分析智能体?? 判断用户需求是否已改变,(保留搜索条件)

3. 记忆模块:基于 Redis 的会话持久化

4. 数据层:MongoDB + RAG 知识库

5. 工具链:LangChain 整合外部能力

通过 AutoGen 的 function_call 机制注册工具,供智能体调用: - MongoDB 查询工具:封装 pymongo 接口,支持按条件查询房源: python def query_housing(conditions: dict) -> list: """查询符合条件的房源""" return list(mongo_db.housing.find(conditions).limit(10)) - WebSocket 推送工具:触发房源实时推送: python def push_to_user(session_id: str, data: dict): """通过WebSocket向用户推送数据""" websocket_manager.broadcast(session_id, json.dumps(data)) - RAG 检索工具:调用向量库补充房源信息: python def rag_retrieve(query: str) -> str: """从知识库检索相关信息""" return vector_db.similarity_search(query, k=3)[0].page_content

三、核心流程:用户找房全链路

以“用户找上海浦东两居室,预算8000元内”为例,流程如下:

1. 会话初始化

2. 需求解析与条件补全

3. 数据库查询与结果处理

4. 流式回答与实时推送

5. 会话结束与记忆持久化

四、技术实现关键点

1. AutoGen 智能体协作配置

from autogen import AssistantAgent, GroupChat, GroupChatManager
from tools import query_housing, push_to_user, rag_retrieve

# 定义智能体
user_agent = AssistantAgent(
    name="用户交互智能体",
    system_message="负责与用户对话,引导补充需求,生成自然回复",
    llm_config={"model": "gpt-4"},
    function_map={"rag_retrieve": rag_retrieve}  # 绑定RAG工具
)

db_agent = AssistantAgent(
    name="数据库查询智能体",
    system_message="调用数据库查询房源,处理返回结果",
    llm_config={"model": "gpt-4"},
    function_map={"query_housing": query_housing}
)

# 其他智能体配置...

# 群聊管理
groupchat = GroupChat(agents=[user_agent, parse_agent, db_agent, arrange_agent, push_agent], messages=[], max_round=20)
manager = GroupChatManager(groupchat=groupchat, llm_config={"model": "gpt-4"})

2. Redis 会话记忆集成

from langchain.memory import RedisChatMessageHistory

# 初始化会话记忆
def init_memory(session_id: str):
    history = RedisChatMessageHistory(
        session_id=session_id,
        redis_url="redis://localhost:6379/0"
    )
    # 绑定到AutoGen智能体
    user_agent.memory = history
    return history

3. 流式回答与 WebSocket 推送

app = FastAPI() websocket_manager = WebSocketManager() # 自定义WebSocket连接管理器

@app.websocket("/ws/{session_id}") async def websocket_endpoint(websocket: WebSocket, session_id: str): await websocket_manager.connect(session_id, websocket) while True: data = await websocket.receive_text() # 接收用户输入 # 触发智能体处理 response = await manager.run_async(user_agent, data) # 流式推送思考过程和结果 for chunk in response["stream"]: await websocket_manager.send(session_id, chunk) ``` - 前端处理:通过 WebSocket 监听消息,实时更新 UI(思考过程用灰色小字,结果用黑色大字,房源列表单独渲染)。

4. RAG 知识库构建

from langchain.document_loaders import DirectoryLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Pinecone

# 加载小区信息文档
loader = DirectoryLoader('housing_kb/', glob="*.txt")
docs = loader.load()

# 构建向量库
embeddings = OpenAIEmbeddings()
vector_db = Pinecone.from_documents(docs, embeddings, index_name="housing-index")

以下是基于 NestJS 实现智能找房系统的任务清单,替换原方案中的 FastAPI 并保持核心架构(AutoGen + LangChain + Redis + MongoDB + RAG + WebSocket)不变。清单按开发阶段划分,包含任务功能、完成标准及工时预估(按“人天”计算,1人天=8小时)。

一、当前已完成的任务

任务名称 功能描述 完成标准
技术栈配置 NestJS 项目骨架,集成 TypeScript、ESLint、Prettier;配置依赖管理(package.json),引入核心库(autogen、langchain、redis、mongodb、ws等)。 1. 项目可正常启动(nest start 无报错);
2. 依赖版本兼容,无冲突;
3. 代码规范配置生效(提交代码自动格式化)。
数据库 部署 MongoDB(apartment+unit)
Redis(用于会话记忆?)+ 配置持久化策略。
1. MongoDB 可通过 Mongoose 连接,插入/查询房源数据成功;
2. Redis 可通过 ioredis 连接,测试 set/get 操作成功;
3. 数据库连接配置存入 NestJS 环境变量(.env)。
RAG 知识库 准备房源辅助文档(公寓配套、政策法规、周边环境等),使用 LangChain 加载文档并生成向量;部署向量数据库(如 qdrant),构建索引。 1. 向量库初始化完成,可通过 LangChain 进行相似性检索(如查询“张江小区配套”返回相关文档);
2. 向量生成逻辑封装为可复用服务。
NER解析 将用户需求准确转换为搜索条件 api_test已定义的场景测试通过 > 85%
依赖模块 用户模块,公寓/单元模块,问卷模块 用户/公寓/单元 增删改查接口

二、核心模块开发(总计:12天)

2.1 会话管理模块(用户会话与记忆)

任务名称 功能描述 完成标准 工时预估
会话实体与 Redis 存储 定义 Session 实体(含 sessionId、history、queryConditions、status 等字段);封装 Redis 操作服务(创建、查询、更新、删除会话)。 1. 会话可通过 sessionId 唯一标识,支持创建新会话和加载历史会话;
2. Redis 存储格式正确(历史消息数组、查询条件JSON);
3. 提供 SessionService 供其他模块调用。
2人天
记忆截断与摘要服务 基于 LangChain 的 ConversationSummaryMemory 实现对话历史压缩;当会话历史过长时,自动生成摘要并保留关键信息(如预算、区域)。 1. 当对话轮次超过10轮,自动触发摘要生成;
2. 摘要包含用户核心需求,无关键信息丢失;
3. 摘要与最新消息拼接后不超过 LLM 上下文限制(如8k tokens)。
1人天

2.2 多智能体模块(AutoGen 集成)

任务名称 功能描述 完成标准 工时预估
智能体定义与配置 基于 AutoGen 定义5个智能体(用户交互、需求解析、数据库查询、结果整理、推送协调),配置角色指令(systemMessage)、LLM 模型(如 GPT-4)及工具映射。 1. 每个智能体角色明确,调用 LLM 无报错;
2. 智能体可通过 GroupChatManager 协调,支持群聊模式;
3. 智能体配置可通过环境变量动态调整(如切换模型)。
2人天
工具链集成(LangChain + 自定义工具) 封装工具函数:MongoDB 房源查询、WebSocket 推送、RAG 检索;通过 AutoGen 的 functionMap 绑定工具,支持智能体自动调用。 1. 工具调用格式符合 AutoGen 规范(JSON Schema);
2. 智能体可根据任务自动选择工具(如需求解析后调用数据库查询);
3. 工具返回结果可被智能体解析并用于后续对话。
2人天

2.3 实时通信模块(WebSocket)

任务名称 功能描述 完成标准 工时预估
WebSocket 服务器与连接管理 使用 NestJS 的 @nestjs/websockets 模块搭建 WebSocket 服务;实现连接建立/关闭、消息接收/发送,通过 sessionId 管理用户连接。 1. 客户端可通过 ws://localhost:3031/ws/{sessionId} 建立连接;
2. 服务端可向指定 sessionId 推送消息(如流式回答、房源数据);
3. 连接异常断开时自动清理资源。
1人天
流式回答与房源推送 实现流式消息发送(逐句推送智能体思考过程和结果);封装房源推送格式(含标题、价格、距离等字段),支持批量/单条推送。 1. 流式消息在客户端按顺序展示,无乱序;
2. 房源数据推送后,客户端可解析并渲染列表;
3. 推送性能:10条房源数据推送耗时 < 1秒。
1人天

2.4 业务流程整合与接口开发(总计:5人天)

任务名称 功能描述 完成标准 工时预估
会话初始化接口 开发 HTTP POST 接口(/api/sessions),用于创建新会话,返回 sessionId 和 WebSocket 连接地址。 1. 调用接口后,Redis 中生成新会话记录;
2. 接口返回格式:{ sessionId: string, wsUrl: string }
3. 支持并发请求(100 QPS 无报错)。
1人天
智能体协作流程串联 实现“用户输入→智能体处理→结果推送”全流程:接收 WebSocket 消息后,触发 AutoGen 群聊逻辑,按角色分工处理,最终通过 WebSocket 返回结果。 1. 端到端流程通畅:用户发送“找浦东两居室”→ 智能体条件追问→ 用户补充预算→ 查询房源→ 推送结果;
2. 各智能体按职责协作,无越权或遗漏步骤;
3. 单轮交互响应时间 < 3秒。
2人天

SOP

宗旨: 1. 清晰理解用户话语,基于自身业务回答用户问题,不能出现“抱歉,我不太明白”等输出 2. 推送符合用户要求的房源

较难实现(可放后面,先实现流程): - 多位置查询 - 多边形查询 - 通勤时间查询 - 实体重合情况 - 方言/英文 - 换一批房源:标准? - 图片与文字的统一性 - 找房场景的覆盖情况

人性化问题: - 公寓住女生和男生的区别 - 自我介绍(业务内容涵盖哪些方面,业务支持情况) - 家电齐全的标准 - 拎包入住的标准

# AutoGen 多智能体标准工作流定义

## 一、场景与目标
- **业务场景**:智能找房服务(用户输入租房需求→智能体协作匹配房源→生成推荐结果并实时推送)
- **核心目标**:通过多智能体分工,将用户自然语言需求转化为结构化房源查询,完成数据库检索、结果整理及实时推送,确保流程无遗漏、响应高效。


## 二、智能体角色与职责
请严格按照以下角色定义执行任务,不越权、不重复处理:

1. **用户交互智能体(UserAgent)**  
   - 唯一接口:接收用户原始输入(如“找上海浦东2居室,预算8000元”),通过多轮对话补充缺失信息(如通勤要求、房型细节)。  
   - 输出物:整理后的用户需求文本(需包含核心条件:区域、价格、房型、特殊要求)。  
   - 禁止:直接调用数据库或生成房源推荐。

2. **需求解析智能体(NerAgent)**  
   - 输入:用户交互智能体输出的需求文本。  
   - 职责:将自然语言需求转化为结构化查询条件(JSON格式),包含字段:`area`(区域)、`price`(价格范围)、`rooms`(房型)、`subway_distance`(通勤距离)、`facilities`(配套要求)等。  
   - 输出物:结构化查询条件(示例:`{"area":"浦东","price":{"$lte":8000},"rooms":2,"subway_distance":{"$lte":800}}`)。  
   - 校验:若解析结果缺失关键字段(如价格),需返回用户交互智能体重新确认。

3. **数据库查询智能体(DBAgent)**  
   - 输入:需求解析智能体输出的结构化查询条件。  
   - 职责:调用 MongoDB 工具执行房源查询,返回符合条件的房源列表(最多10条,按价格升序排序)。  
   - 输出物:原始房源数据(含标题、价格、地址、配套、距离地铁等字段)。  
   - 异常处理:若查询结果为空,返回“无匹配房源”提示,终止流程。

4. **结果整理智能体(FormatterAgent)**  
   - 输入:数据库查询智能体返回的原始房源数据。  
   - 职责:  
     - 调用 RAG 工具补充房源周边信息(如小区配套、学区资源);  
     - 将数据转化为用户友好的自然语言描述(分条列出,突出价格、通勤、核心优势)。  
   - 输出物:格式化推荐文本(示例:“1. 张江汤臣豪园 2室1厅:7500元/月,步行8分钟到2号线,允许养宠,周边有张江实验小学”)。

5. **推送协调智能体(PusherAgent)**  
   - 输入:结果整理智能体的推荐文本 + 引导语(xx房源数据)。  
   - 职责:  
     - 通过 WebSocket 工具向用户流式推送推荐文本(先推送思考过程,再分条推送结果);  
     - 提取原始房源中的结构化数据(如图片URL、联系方式),通过 WebSocket 单独推送(供前端渲染列表)。  
   - 输出物:推送完成确认(含成功推送的房源数量)+ 调用socket推送房源卡片。


## 三、工作流步骤(严格按顺序执行)
1. **启动阶段**:用户发送初始需求后,用户交互智能体自动激活,其他智能体待命。  
2. **需求收集**:用户交互智能体通过多轮对话完善需求,确认所有关键条件后,将需求文本传递给需求解析智能体。  
3. **需求解析**:需求解析智能体生成结构化查询条件,若校验通过,传递给数据库查询智能体;否则返回用户交互智能体。  
4. **房源查询**:数据库查询智能体执行查询,返回结果给结果整理智能体;若结果为空,直接通知用户交互智能体终止流程。  
5. **结果处理**:结果整理智能体补充信息并格式化,将文本和原始数据同步传递给推送协调智能体。  
6. **实时推送**:推送协调智能体完成流式回答和房源数据推送,向所有智能体广播“任务完成”。  
7. **终止条件**:满足以下任一条件时流程终止:  
   - 推送协调智能体返回“推送完成”;  
   - 数据库查询智能体返回“无匹配房源”;  
   - 用户明确输入“结束”或会话超时(30分钟无交互)。


## 四、交互规则
1. **消息传递**:智能体间仅传递当前步骤的输出物(如用户交互智能体→需求解析智能体,仅传递需求文本),不附带无关历史。  
2. **发言顺序**:严格按工作流步骤轮次发言,非当前步骤的智能体不得主动插话(如数据库查询阶段,结果整理智能体需等待输入,不得提前行动)。  
3. **异常处理**:  
   - 若工具调用失败(如数据库连接超时),当前智能体需重试2次,仍失败则通知用户交互智能体,由其告知用户“暂时无法处理,请稍后重试”。  
   - 若收到无法理解的输入(如用户发送乱码),用户交互智能体需提示“请输入清晰的租房需求(如区域、价格、房型)”。  


## 五、工具调用规范
1. **工具权限**:仅数据库查询智能体可调用 `query_housing` 工具,仅推送协调智能体可调用 `websocket_push` 工具,仅结果整理智能体可调用 `rag_retrieve` 工具,其他智能体禁止调用。  
2. **调用格式**:工具调用必须使用 AutoGen 函数调用格式(JSON Schema),示例:  
   ```json
   {"name":"query_housing","parameters":{"conditions":{"area":"浦东","price":{"$lte":8000}}}}
  1. 结果处理:工具返回结果后,调用方需验证格式(如房源数据是否包含 price 字段),无效结果需重新调用工具。

六、输出要求

  1. 流式回答:推送协调智能体需先推送思考过程(如“正在整理符合条件的房源,优先为您推荐价格较低的选项...”),再分条推送结果(每条1个房源)。
  2. 日志记录:每个智能体完成自身步骤后,需在消息末尾附加日志标签(如 [UserAgent 完成需求收集] [DBAgent 完成查询,返回5条结果]),便于流程追踪。

请所有智能体严格遵循以上工作流,确保协作高效、结果准确。若出现工作流未覆盖的异常场景,由用户交互智能体主导,询问用户进一步指令。 ```


Page Source