MicroFish/.kiro/specs/i18n-e2e-english-verification/audit/9dcaecd2d27e6325bae0c53b9ab.../classified.csv

352 KiB
Raw Blame History

1filelinematchclasscategorypipeline_step
2backend/app/__init__.py2MiroFish Backend - Flask应用工厂deliberatebackend-docstringn/a
3backend/app/__init__.py8# 抑制 multiprocessing resource_tracker 的警告(来自第三方库如 transformersdeliberatebackend-commentn/a
4backend/app/__init__.py9# 需要在所有其他导入之前设置deliberatebackend-commentn/a
5backend/app/__init__.py21"""Flask应用工厂函数"""deliberatebackend-docstringn/a
6backend/app/__init__.py25# 设置JSON编码确保中文直接显示而不是 \uXXXX 格式)deliberatebackend-commentn/a
7backend/app/__init__.py26# Flask >= 2.3 使用 app.json.ensure_ascii旧版本使用 JSON_AS_ASCII 配置deliberatebackend-commentn/a
8backend/app/__init__.py30# 设置日志deliberatebackend-commentn/a
9backend/app/__init__.py33# 只在 reloader 子进程中打印启动信息(避免 debug 模式下打印两次)deliberatebackend-commentn/a
10backend/app/__init__.py43# 启用CORSdeliberatebackend-commentn/a
11backend/app/__init__.py46# 注册模拟进程清理函数(确保服务器关闭时终止所有模拟进程)deliberatebackend-commentn/a
12backend/app/__init__.py52# 请求日志中间件deliberatebackend-commentn/a
13backend/app/__init__.py66# 注册蓝图deliberatebackend-commentn/a
14backend/app/__init__.py72# 健康检查deliberatebackend-commentn/a
15backend/app/api/__init__.py2API路由模块deliberatebackend-docstringn/a
16backend/app/api/graph.py2图谱相关API路由deliberatebackend-docstringGraph Build
17backend/app/api/graph.py3采用项目上下文机制,服务端持久化状态deliberatebackend-docstringGraph Build
18backend/app/api/graph.py29# 获取日志器deliberatebackend-commentGraph Build
19backend/app/api/graph.py34"""检查文件扩展名是否允许"""deliberatebackend-docstringGraph Build
20backend/app/api/graph.py41# ============== 项目管理接口 ==============deliberatebackend-commentGraph Build
21backend/app/api/graph.py46获取项目详情deliberatebackend-docstringGraph Build
22backend/app/api/graph.py65列出所有项目deliberatebackend-docstringGraph Build
23backend/app/api/graph.py80删除项目deliberatebackend-docstringGraph Build
24backend/app/api/graph.py99重置项目状态(用于重新构建图谱)deliberatebackend-docstringGraph Build
25backend/app/api/graph.py109# 重置到本体已生成状态deliberatebackend-commentGraph Build
26backend/app/api/graph.py127# ============== 接口1上传文件并生成本体 ==============deliberatebackend-commentGraph Build
27backend/app/api/graph.py132接口1上传文件分析生成本体定义deliberatebackend-docstringGraph Build
28backend/app/api/graph.py134请求方式multipart/form-datadeliberatebackend-docstringGraph Build
29backend/app/api/graph.py136参数:deliberatebackend-docstringGraph Build
30backend/app/api/graph.py137files: 上传的文件PDF/MD/TXT可多个deliberatebackend-docstringGraph Build
31backend/app/api/graph.py138simulation_requirement: 模拟需求描述(必填)deliberatebackend-docstringGraph Build
32backend/app/api/graph.py139project_name: 项目名称(可选)deliberatebackend-docstringGraph Build
33backend/app/api/graph.py140additional_context: 额外说明(可选)deliberatebackend-docstringGraph Build
34backend/app/api/graph.py142返回:deliberatebackend-docstringGraph Build
35backend/app/api/graph.py160# 获取参数deliberatebackend-commentGraph Build
36backend/app/api/graph.py174# 获取上传的文件deliberatebackend-commentGraph Build
37backend/app/api/graph.py182# 创建项目deliberatebackend-commentGraph Build
38backend/app/api/graph.py187# 保存文件并提取文本deliberatebackend-commentGraph Build
39backend/app/api/graph.py193# 保存文件到项目目录deliberatebackend-commentGraph Build
40backend/app/api/graph.py204# 提取文本deliberatebackend-commentGraph Build
41backend/app/api/graph.py217# 保存提取的文本deliberatebackend-commentGraph Build
42backend/app/api/graph.py222# 生成本体deliberatebackend-commentGraph Build
43backend/app/api/graph.py231# 保存本体到项目deliberatebackend-commentGraph Build
44backend/app/api/graph.py265# ============== 接口2构建图谱 ==============deliberatebackend-commentGraph Build
45backend/app/api/graph.py270接口2根据project_id构建图谱deliberatebackend-docstringGraph Build
46backend/app/api/graph.py272请求JSONdeliberatebackend-docstringGraph Build
47backend/app/api/graph.py274"project_id": "proj_xxxx", // 必填来自接口1review-neededbackend-stringGraph Build
48backend/app/api/graph.py275"graph_name": "图谱名称", // 可选review-neededbackend-stringGraph Build
49backend/app/api/graph.py276"chunk_size": 500, // 可选默认500review-neededbackend-stringGraph Build
50backend/app/api/graph.py277"chunk_overlap": 50 // 可选默认50review-neededbackend-stringGraph Build
51backend/app/api/graph.py280返回:deliberatebackend-docstringGraph Build
52backend/app/api/graph.py286"message": "图谱构建任务已启动"review-neededbackend-stringGraph Build
53backend/app/api/graph.py293# 检查配置deliberatebackend-commentGraph Build
54backend/app/api/graph.py296errors.append("NEO4J未配置")review-neededbackend-stringGraph Build
55backend/app/api/graph.py301"error": "配置错误: " + "; ".join(errors)review-neededbackend-stringGraph Build
56backend/app/api/graph.py304# 解析请求deliberatebackend-commentGraph Build
57backend/app/api/graph.py315# 获取项目deliberatebackend-commentGraph Build
58backend/app/api/graph.py323# 检查项目状态deliberatebackend-commentGraph Build
59backend/app/api/graph.py324force = data.get('force', False) # 强制重新构建review-neededbackend-stringGraph Build
60backend/app/api/graph.py339# 如果强制重建,重置状态deliberatebackend-commentGraph Build
61backend/app/api/graph.py346# 获取配置deliberatebackend-commentGraph Build
62backend/app/api/graph.py351# 更新项目配置deliberatebackend-commentGraph Build
63backend/app/api/graph.py355# 获取提取的文本deliberatebackend-commentGraph Build
64backend/app/api/graph.py363# 获取本体deliberatebackend-commentGraph Build
65backend/app/api/graph.py371# 创建异步任务deliberatebackend-commentGraph Build
66backend/app/api/graph.py373task_id = task_manager.create_task(f"构建图谱: {graph_name}")review-neededbackend-stringGraph Build
67backend/app/api/graph.py376# 更新项目状态deliberatebackend-commentGraph Build
68backend/app/api/graph.py381# 启动后台任务deliberatebackend-commentGraph Build
69backend/app/api/graph.py385build_logger.info(f"[{task_id}] 开始构建图谱...")gapbackend-logLogs
70backend/app/api/graph.py389message="初始化图谱构建服务..."review-neededbackend-stringGraph Build
71backend/app/api/graph.py392# 创建图谱构建服务deliberatebackend-commentGraph Build
72backend/app/api/graph.py395# 分块deliberatebackend-commentGraph Build
73backend/app/api/graph.py398message="文本分块中...",review-neededbackend-stringGraph Build
74backend/app/api/graph.py408# 创建图谱deliberatebackend-commentGraph Build
75backend/app/api/graph.py411message="创建Zep图谱...",review-neededbackend-stringGraph Build
76backend/app/api/graph.py416# 更新项目的graph_iddeliberatebackend-commentGraph Build
77backend/app/api/graph.py420# 设置本体deliberatebackend-commentGraph Build
78backend/app/api/graph.py423message="设置本体定义...",review-neededbackend-stringGraph Build
79backend/app/api/graph.py428# 添加文本progress_callback 签名是 (msg, progress_ratio)deliberatebackend-commentGraph Build
80backend/app/api/graph.py451msg_start = (f"断点续传:跳过 {skip_chunks} 个已处理块,继续处理 {remaining} 块..."review-neededbackend-stringGraph Build
81backend/app/api/graph.py452if skip_chunks > 0 else f"开始添加 {total_chunks} 个文本块...")review-neededbackend-stringGraph Build
82backend/app/api/graph.py463# 等待Zep处理完成查询每个episode的processed状态deliberatebackend-commentGraph Build
83backend/app/api/graph.py466message="等待Zep处理数据...",review-neededbackend-stringGraph Build
84backend/app/api/graph.py480# 获取图谱数据deliberatebackend-commentGraph Build
85backend/app/api/graph.py483message="获取图谱数据...",review-neededbackend-stringGraph Build
86backend/app/api/graph.py488# 更新项目状态deliberatebackend-commentGraph Build
87backend/app/api/graph.py494build_logger.info(f"[{task_id}] 图谱构建完成: graph_id={graph_id}, 节点={node_count}, 边={edge_count}")gapbackend-logLogs
88backend/app/api/graph.py496# 完成deliberatebackend-commentGraph Build
89backend/app/api/graph.py500message="图谱构建完成",review-neededbackend-stringGraph Build
90backend/app/api/graph.py512# 更新项目状态为失败deliberatebackend-commentGraph Build
91backend/app/api/graph.py513build_logger.error(f"[{task_id}] 图谱构建失败: {str(e)}")gapbackend-logLogs
92backend/app/api/graph.py523message=f"构建失败: {str(e)}",review-neededbackend-stringGraph Build
93backend/app/api/graph.py527# 启动后台线程deliberatebackend-commentGraph Build
94backend/app/api/graph.py536"message": "图谱构建任务已启动,请通过 /task/{task_id} 查询进度"review-neededbackend-stringGraph Build
95backend/app/api/graph.py548# ============== 任务查询接口 ==============deliberatebackend-commentGraph Build
96backend/app/api/graph.py553查询任务状态deliberatebackend-docstringGraph Build
97backend/app/api/graph.py572列出所有任务deliberatebackend-docstringGraph Build
98backend/app/api/graph.py583# ============== 图谱数据接口 ==============deliberatebackend-commentGraph Build
99backend/app/api/graph.py611获取图谱数据(节点和边)。deliberatebackend-docstringGraph Build
100backend/app/api/graph.py612- 有缓存且未过期:直接返回缓存,不调用 Zepdeliberatebackend-docstringGraph Build
101backend/app/api/graph.py613- 有缓存但已过期:立即返回旧缓存,后台异步刷新deliberatebackend-docstringGraph Build
102backend/app/api/graph.py614- 无缓存:后台线程拉取,返回 202 让前端稍后重试deliberatebackend-docstringGraph Build
103backend/app/api/graph.py643删除Zep图谱deliberatebackend-docstringGraph Build
104backend/app/api/report.py2Report API路由deliberatebackend-docstringn/a
105backend/app/api/report.py3提供模拟报告生成、获取、对话等接口deliberatebackend-docstringn/a
106backend/app/api/report.py23# ============== 报告生成接口 ==============deliberatebackend-commentn/a
107backend/app/api/report.py28生成模拟分析报告(异步任务)deliberatebackend-docstringn/a
108backend/app/api/report.py30这是一个耗时操作接口会立即返回task_iddeliberatebackend-docstringn/a
109backend/app/api/report.py31使用 GET /api/report/generate/status 查询进度deliberatebackend-docstringn/a
110backend/app/api/report.py33请求JSONdeliberatebackend-docstringn/a
111backend/app/api/report.py35"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringn/a
112backend/app/api/report.py36"force_regenerate": false // 可选,强制重新生成review-neededbackend-stringn/a
113backend/app/api/report.py39返回:deliberatebackend-docstringn/a
114backend/app/api/report.py46"message": "报告生成任务已启动"review-neededbackend-stringn/a
115backend/app/api/report.py62# 获取模拟信息deliberatebackend-commentn/a
116backend/app/api/report.py72# 检查是否已有报告deliberatebackend-commentn/a
117backend/app/api/report.py87# 获取项目信息deliberatebackend-commentn/a
118backend/app/api/report.py109# 提前生成 report_id以便立即返回给前端deliberatebackend-commentn/a
119backend/app/api/report.py113# 创建异步任务deliberatebackend-commentn/a
120backend/app/api/report.py127# 定义后台任务deliberatebackend-commentn/a
121backend/app/api/report.py138# 创建Report Agentdeliberatebackend-commentn/a
122backend/app/api/report.py145# 进度回调deliberatebackend-commentn/a
123backend/app/api/report.py153# 生成报告(传入预先生成的 report_iddeliberatebackend-commentn/a
124backend/app/api/report.py159# 保存报告deliberatebackend-commentn/a
125backend/app/api/report.py178# 启动后台线程deliberatebackend-commentn/a
126backend/app/api/report.py206查询报告生成任务进度deliberatebackend-docstringn/a
127backend/app/api/report.py208请求JSONdeliberatebackend-docstringn/a
128backend/app/api/report.py210"task_id": "task_xxxx", // 可选generate返回的task_idreview-neededbackend-stringn/a
129backend/app/api/report.py211"simulation_id": "sim_xxxx" // 可选模拟IDreview-neededbackend-stringn/a
130backend/app/api/report.py214返回:deliberatebackend-docstringn/a
131backend/app/api/report.py231# 如果提供了simulation_id先检查是否已有完成的报告deliberatebackend-commentn/a
132backend/app/api/report.py275# ============== 报告获取接口 ==============deliberatebackend-commentn/a
133backend/app/api/report.py280获取报告详情deliberatebackend-docstringn/a
134backend/app/api/report.py282返回:deliberatebackend-docstringn/a
135backend/app/api/report.py322根据模拟ID获取报告deliberatebackend-docstringn/a
136backend/app/api/report.py324返回:deliberatebackend-docstringn/a
137backend/app/api/report.py361列出所有报告deliberatebackend-docstringn/a
138backend/app/api/report.py363Query参数deliberatebackend-docstringn/a
139backend/app/api/report.py364simulation_id: 按模拟ID过滤可选deliberatebackend-docstringn/a
140backend/app/api/report.py365limit: 返回数量限制默认50deliberatebackend-docstringn/a
141backend/app/api/report.py367返回:deliberatebackend-docstringn/a
142backend/app/api/report.py401下载报告Markdown格式deliberatebackend-docstringn/a
143backend/app/api/report.py403返回Markdown文件deliberatebackend-docstringn/a
144backend/app/api/report.py417# 如果MD文件不存在生成一个临时文件deliberatebackend-commentn/a
145backend/app/api/report.py446"""删除报告"""deliberatebackend-docstringn/a
146backend/app/api/report.py470# ============== Report Agent对话接口 ==============deliberatebackend-commentn/a
147backend/app/api/report.py475与Report Agent对话deliberatebackend-docstringn/a
148backend/app/api/report.py477Report Agent可以在对话中自主调用检索工具来回答问题deliberatebackend-docstringn/a
149backend/app/api/report.py479请求JSONdeliberatebackend-docstringn/a
150backend/app/api/report.py481"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringn/a
151backend/app/api/report.py482"message": "请解释一下舆情走向", // 必填,用户消息review-neededbackend-stringn/a
152backend/app/api/report.py483"chat_history": [ // 可选,对话历史review-neededbackend-stringn/a
153backend/app/api/report.py489返回:deliberatebackend-docstringn/a
154backend/app/api/report.py493"response": "Agent回复...",review-neededbackend-stringn/a
155backend/app/api/report.py494"tool_calls": [调用的工具列表],review-neededbackend-stringn/a
156backend/app/api/report.py495"sources": [信息来源]review-neededbackend-stringn/a
157backend/app/api/report.py518# 获取模拟和项目信息deliberatebackend-commentn/a
158backend/app/api/report.py544# 创建Agent并进行对话deliberatebackend-commentn/a
159backend/app/api/report.py567# ============== 报告进度与分章节接口 ==============deliberatebackend-commentn/a
160backend/app/api/report.py572获取报告生成进度(实时)deliberatebackend-docstringn/a
161backend/app/api/report.py574返回:deliberatebackend-docstringn/a
162backend/app/api/report.py580"message": "正在生成章节: 关键发现",review-neededbackend-stringn/a
163backend/app/api/report.py581"current_section": "关键发现",review-neededbackend-stringn/a
164backend/app/api/report.py582"completed_sections": ["执行摘要", "模拟背景"],review-neededbackend-stringn/a
165backend/app/api/report.py613获取已生成的章节列表(分章节输出)deliberatebackend-docstringn/a
166backend/app/api/report.py615前端可以轮询此接口获取已生成的章节内容,无需等待整个报告完成deliberatebackend-docstringn/a
167backend/app/api/report.py617返回:deliberatebackend-docstringn/a
168backend/app/api/report.py626"content": "## 执行摘要\\n\\n..."review-neededbackend-stringn/a
169backend/app/api/report.py638# 获取报告状态deliberatebackend-commentn/a
170backend/app/api/report.py664获取单个章节内容deliberatebackend-docstringn/a
171backend/app/api/report.py666返回:deliberatebackend-docstringn/a
172backend/app/api/report.py671"content": "## 执行摘要\\n\\n..."review-neededbackend-stringn/a
173backend/app/api/report.py705# ============== 报告状态检查接口 ==============deliberatebackend-commentn/a
174backend/app/api/report.py710检查模拟是否有报告,以及报告状态deliberatebackend-docstringn/a
175backend/app/api/report.py712用于前端判断是否解锁Interview功能deliberatebackend-docstringn/a
176backend/app/api/report.py714返回:deliberatebackend-docstringn/a
177backend/app/api/report.py733# 只有报告完成后才解锁interviewdeliberatebackend-commentn/a
178backend/app/api/report.py756# ============== Agent 日志接口 ==============deliberatebackend-commentn/a
179backend/app/api/report.py761获取 Report Agent 的详细执行日志deliberatebackend-docstringn/a
180backend/app/api/report.py763实时获取报告生成过程中的每一步动作,包括:deliberatebackend-docstringn/a
181backend/app/api/report.py764- 报告开始、规划开始/完成deliberatebackend-docstringn/a
182backend/app/api/report.py765- 每个章节的开始、工具调用、LLM响应、完成deliberatebackend-docstringn/a
183backend/app/api/report.py766- 报告完成或失败deliberatebackend-docstringn/a
184backend/app/api/report.py768Query参数deliberatebackend-docstringn/a
185backend/app/api/report.py769from_line: 从第几行开始读取可选默认0用于增量获取deliberatebackend-docstringn/a
186backend/app/api/report.py771返回:deliberatebackend-docstringn/a
187backend/app/api/report.py782"section_title": "执行摘要",review-neededbackend-stringn/a
188backend/app/api/report.py820获取完整的 Agent 日志(一次性获取全部)deliberatebackend-docstringn/a
189backend/app/api/report.py822返回:deliberatebackend-docstringn/a
190backend/app/api/report.py851# ============== 控制台日志接口 ==============deliberatebackend-commentn/a
191backend/app/api/report.py856获取 Report Agent 的控制台输出日志deliberatebackend-docstringn/a
192backend/app/api/report.py858实时获取报告生成过程中的控制台输出INFO、WARNING等deliberatebackend-docstringn/a
193backend/app/api/report.py859这与 agent-log 接口返回的结构化 JSON 日志不同,deliberatebackend-docstringn/a
194backend/app/api/report.py860是纯文本格式的控制台风格日志。deliberatebackend-docstringn/a
195backend/app/api/report.py862Query参数deliberatebackend-docstringn/a
196backend/app/api/report.py863from_line: 从第几行开始读取可选默认0用于增量获取deliberatebackend-docstringn/a
197backend/app/api/report.py865返回:deliberatebackend-docstringn/a
198backend/app/api/report.py870"[19:46:14] INFO: 搜索完成: 找到 15 条相关事实",review-neededbackend-stringn/a
199backend/app/api/report.py871"[19:46:14] INFO: 图谱搜索: graph_id=xxx, query=...",review-neededbackend-stringn/a
200backend/app/api/report.py902获取完整的控制台日志(一次性获取全部)deliberatebackend-docstringn/a
201backend/app/api/report.py904返回:deliberatebackend-docstringn/a
202backend/app/api/report.py933# ============== 工具调用接口(供调试使用)==============deliberatebackend-commentn/a
203backend/app/api/report.py938图谱搜索工具接口(供调试使用)deliberatebackend-docstringn/a
204backend/app/api/report.py940请求JSONdeliberatebackend-docstringn/a
205backend/app/api/report.py943"query": "搜索查询",review-neededbackend-stringn/a
206backend/app/api/report.py986图谱统计工具接口(供调试使用)deliberatebackend-docstringn/a
207backend/app/api/report.py988请求JSONdeliberatebackend-docstringn/a
208backend/app/api/simulation.py2模拟相关API路由deliberatebackend-docstringSimulation
209backend/app/api/simulation.py3Step2: Zep实体读取与过滤、OASIS模拟准备与运行全程自动化deliberatebackend-docstringSimulation
210backend/app/api/simulation.py23# Interview prompt 优化前缀deliberatebackend-commentSimulation
211backend/app/api/simulation.py24# 添加此前缀可以避免Agent调用工具直接用文本回复deliberatebackend-commentSimulation
212backend/app/api/simulation.py25INTERVIEW_PROMPT_PREFIX = "结合你的人设、所有的过往记忆与行动,不调用任何工具直接用文本回复我:"review-neededbackend-stringSimulation
213backend/app/api/simulation.py30优化Interview提问添加前缀避免Agent调用工具deliberatebackend-docstringSimulation
214backend/app/api/simulation.py33prompt: 原始提问deliberatebackend-docstringSimulation
215backend/app/api/simulation.py36优化后的提问deliberatebackend-docstringSimulation
216backend/app/api/simulation.py40# 避免重复添加前缀deliberatebackend-commentSimulation
217backend/app/api/simulation.py46# ============== 实体读取接口 ==============deliberatebackend-commentSimulation
218backend/app/api/simulation.py51获取图谱中的所有实体(已过滤)deliberatebackend-docstringSimulation
219backend/app/api/simulation.py53只返回符合预定义实体类型的节点Labels不只是Entity的节点deliberatebackend-docstringSimulation
220backend/app/api/simulation.py55Query参数deliberatebackend-docstringSimulation
221backend/app/api/simulation.py56entity_types: 逗号分隔的实体类型列表(可选,用于进一步过滤)deliberatebackend-docstringSimulation
222backend/app/api/simulation.py57enrich: 是否获取相关边信息默认truedeliberatebackend-docstringSimulation
223backend/app/api/simulation.py95"""获取单个实体的详细信息"""deliberatebackend-docstringSimulation
224backend/app/api/simulation.py128"""获取指定类型的所有实体"""deliberatebackend-docstringSimulation
225backend/app/api/simulation.py163# ============== 模拟管理接口 ==============deliberatebackend-commentSimulation
226backend/app/api/simulation.py168创建新的模拟deliberatebackend-docstringSimulation
227backend/app/api/simulation.py170注意max_rounds等参数由LLM智能生成无需手动设置deliberatebackend-docstringSimulation
228backend/app/api/simulation.py172请求JSONdeliberatebackend-docstringSimulation
229backend/app/api/simulation.py174"project_id": "proj_xxxx", // 必填review-neededbackend-stringSimulation
230backend/app/api/simulation.py175"graph_id": "mirofish_xxxx", // 可选如不提供则从project获取review-neededbackend-stringSimulation
231backend/app/api/simulation.py176"enable_twitter": true, // 可选默认truereview-neededbackend-stringSimulation
232backend/app/api/simulation.py177"enable_reddit": true // 可选默认truereview-neededbackend-stringSimulation
233backend/app/api/simulation.py180返回:deliberatebackend-docstringSimulation
234backend/app/api/simulation.py242检查模拟是否已经准备完成deliberatebackend-docstringSimulation
235backend/app/api/simulation.py244检查条件:deliberatebackend-docstringSimulation
236backend/app/api/simulation.py2451. state.json 存在且 status 为 "ready"review-neededbackend-stringSimulation
237backend/app/api/simulation.py2462. 必要文件存在reddit_profiles.json, twitter_profiles.csv, simulation_config.jsondeliberatebackend-docstringSimulation
238backend/app/api/simulation.py248注意:运行脚本(run_*.py)保留在 backend/scripts/ 目录,不再复制到模拟目录deliberatebackend-docstringSimulation
239backend/app/api/simulation.py251simulation_id: 模拟IDdeliberatebackend-docstringSimulation
240backend/app/api/simulation.py261# 检查目录是否存在deliberatebackend-commentSimulation
241backend/app/api/simulation.py263return False, {"reason": "模拟目录不存在"}review-neededbackend-stringSimulation
242backend/app/api/simulation.py265# 必要文件列表(不包括脚本,脚本位于 backend/scripts/deliberatebackend-commentSimulation
243backend/app/api/simulation.py273# 检查文件是否存在deliberatebackend-commentSimulation
244backend/app/api/simulation.py285"reason": "缺少必要文件",review-neededbackend-stringSimulation
245backend/app/api/simulation.py290# 检查state.json中的状态deliberatebackend-commentSimulation
246backend/app/api/simulation.py300# 详细日志deliberatebackend-commentSimulation
247backend/app/api/simulation.py303# 如果 config_generated=True 且文件存在,认为准备完成deliberatebackend-commentSimulation
248backend/app/api/simulation.py304# 以下状态都说明准备工作已完成:deliberatebackend-commentSimulation
249backend/app/api/simulation.py305# - ready: 准备完成,可以运行deliberatebackend-commentSimulation
250backend/app/api/simulation.py306# - preparing: 如果 config_generated=True 说明已完成deliberatebackend-commentSimulation
251backend/app/api/simulation.py307# - running: 正在运行,说明准备早就完成了deliberatebackend-commentSimulation
252backend/app/api/simulation.py308# - completed: 运行完成,说明准备早就完成了deliberatebackend-commentSimulation
253backend/app/api/simulation.py309# - stopped: 已停止,说明准备早就完成了deliberatebackend-commentSimulation
254backend/app/api/simulation.py310# - failed: 运行失败(但准备是完成的)deliberatebackend-commentSimulation
255backend/app/api/simulation.py313# 获取文件统计信息deliberatebackend-commentSimulation
256backend/app/api/simulation.py323# 如果状态是preparing但文件已完成自动更新状态为readydeliberatebackend-commentSimulation
257backend/app/api/simulation.py350"reason": f"状态不在已准备列表中或config_generated为false: status={status}, config_generated={config_generated}",review-neededbackend-stringSimulation
258backend/app/api/simulation.py356return False, {"reason": f"读取状态文件失败: {str(e)}"}review-neededbackend-stringSimulation
259backend/app/api/simulation.py362准备模拟环境异步任务LLM智能生成所有参数deliberatebackend-docstringSimulation
260backend/app/api/simulation.py364这是一个耗时操作接口会立即返回task_iddeliberatebackend-docstringSimulation
261backend/app/api/simulation.py365使用 GET /api/simulation/prepare/status 查询进度deliberatebackend-docstringSimulation
262backend/app/api/simulation.py367特性:deliberatebackend-docstringSimulation
263backend/app/api/simulation.py368- 自动检测已完成的准备工作,避免重复生成deliberatebackend-docstringSimulation
264backend/app/api/simulation.py369- 如果已准备完成,直接返回已有结果deliberatebackend-docstringSimulation
265backend/app/api/simulation.py370- 支持强制重新生成force_regenerate=truedeliberatebackend-docstringSimulation
266backend/app/api/simulation.py372步骤:deliberatebackend-docstringSimulation
267backend/app/api/simulation.py3731. 检查是否已有完成的准备工作deliberatebackend-docstringSimulation
268backend/app/api/simulation.py3742. 从Zep图谱读取并过滤实体deliberatebackend-docstringSimulation
269backend/app/api/simulation.py3753. 为每个实体生成OASIS Agent Profile带重试机制deliberatebackend-docstringSimulation
270backend/app/api/simulation.py3764. LLM智能生成模拟配置带重试机制deliberatebackend-docstringSimulation
271backend/app/api/simulation.py3775. 保存配置文件和预设脚本deliberatebackend-docstringSimulation
272backend/app/api/simulation.py379请求JSONdeliberatebackend-docstringSimulation
273backend/app/api/simulation.py381"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
274backend/app/api/simulation.py382"entity_types": ["Student", "PublicFigure"], // 可选,指定实体类型review-neededbackend-stringSimulation
275backend/app/api/simulation.py383"use_llm_for_profiles": true, // 可选是否用LLM生成人设review-neededbackend-stringSimulation
276backend/app/api/simulation.py384"parallel_profile_count": 5, // 可选并行生成人设数量默认5review-neededbackend-stringSimulation
277backend/app/api/simulation.py385"force_regenerate": false // 可选强制重新生成默认falsereview-neededbackend-stringSimulation
278backend/app/api/simulation.py388返回:deliberatebackend-docstringSimulation
279backend/app/api/simulation.py393"task_id": "task_xxxx", // 新任务时返回review-neededbackend-stringSimulation
280backend/app/api/simulation.py395"message": "准备任务已启动|已有完成的准备工作",review-neededbackend-stringSimulation
281backend/app/api/simulation.py396"already_prepared": true|false // 是否已准备完成review-neededbackend-stringSimulation
282backend/app/api/simulation.py424# 检查是否强制重新生成deliberatebackend-commentSimulation
283backend/app/api/simulation.py428# 检查是否已经准备完成(避免重复生成)deliberatebackend-commentSimulation
284backend/app/api/simulation.py440"message": "已有完成的准备工作,无需重复生成",review-neededbackend-stringSimulation
285backend/app/api/simulation.py448# 从项目获取必要信息deliberatebackend-commentSimulation
286backend/app/api/simulation.py456# 获取模拟需求deliberatebackend-commentSimulation
287backend/app/api/simulation.py464# 获取文档文本deliberatebackend-commentSimulation
288backend/app/api/simulation.py471# ========== 同步获取实体数量(在后台任务启动前) ==========deliberatebackend-commentSimulation
289backend/app/api/simulation.py472# 这样前端在调用prepare后立即就能获取到预期Agent总数deliberatebackend-commentSimulation
290backend/app/api/simulation.py476# 快速读取实体(不需要边信息,只统计数量)deliberatebackend-commentSimulation
291backend/app/api/simulation.py480enrich_with_edges=False # 不获取边信息,加快速度deliberatebackend-docstringSimulation
292backend/app/api/simulation.py482# 保存实体数量到状态(供前端立即获取)deliberatebackend-commentSimulation
293backend/app/api/simulation.py488# 失败不影响后续流程,后台任务会重新获取deliberatebackend-commentSimulation
294backend/app/api/simulation.py490# 创建异步任务deliberatebackend-commentSimulation
295backend/app/api/simulation.py500# 更新模拟状态(包含预先获取的实体数量)deliberatebackend-commentSimulation
296backend/app/api/simulation.py504# 定义后台任务deliberatebackend-commentSimulation
297backend/app/api/simulation.py511message="开始准备模拟环境..."review-neededbackend-stringSimulation
298backend/app/api/simulation.py514# 准备模拟(带进度回调)deliberatebackend-commentSimulation
299backend/app/api/simulation.py515# 存储阶段进度详情deliberatebackend-commentSimulation
300backend/app/api/simulation.py519# 计算总进度deliberatebackend-commentSimulation
301backend/app/api/simulation.py530# 构建详细进度信息deliberatebackend-commentSimulation
302backend/app/api/simulation.py532"reading": "读取图谱实体",review-neededbackend-stringSimulation
303backend/app/api/simulation.py533"generating_profiles": "生成Agent人设",review-neededbackend-stringSimulation
304backend/app/api/simulation.py534"generating_config": "生成模拟配置",review-neededbackend-stringSimulation
305backend/app/api/simulation.py535"copying_scripts": "准备模拟脚本"review-neededbackend-stringSimulation
306backend/app/api/simulation.py541# 更新阶段详情deliberatebackend-commentSimulation
307backend/app/api/simulation.py550# 构建详细进度信息deliberatebackend-commentSimulation
308backend/app/api/simulation.py563# 构建简洁消息deliberatebackend-commentSimulation
309backend/app/api/simulation.py589# 任务完成deliberatebackend-commentSimulation
310backend/app/api/simulation.py599# 更新模拟状态为失败deliberatebackend-commentSimulation
311backend/app/api/simulation.py606# 启动后台线程deliberatebackend-commentSimulation
312backend/app/api/simulation.py616"message": "准备任务已启动,请通过 /api/simulation/prepare/status 查询进度",review-neededbackend-stringSimulation
313backend/app/api/simulation.py618"expected_entities_count": state.entities_count, # 预期的Agent总数review-neededbackend-stringSimulation
314backend/app/api/simulation.py619"entity_types": state.entity_types # 实体类型列表review-neededbackend-stringSimulation
315backend/app/api/simulation.py641查询准备任务进度deliberatebackend-docstringSimulation
316backend/app/api/simulation.py643支持两种查询方式:deliberatebackend-docstringSimulation
317backend/app/api/simulation.py6441. 通过task_id查询正在进行的任务进度deliberatebackend-docstringSimulation
318backend/app/api/simulation.py6452. 通过simulation_id检查是否已有完成的准备工作deliberatebackend-docstringSimulation
319backend/app/api/simulation.py647请求JSONdeliberatebackend-docstringSimulation
320backend/app/api/simulation.py649"task_id": "task_xxxx", // 可选prepare返回的task_idreview-neededbackend-stringSimulation
321backend/app/api/simulation.py650"simulation_id": "sim_xxxx" // 可选模拟ID用于检查已完成的准备review-neededbackend-stringSimulation
322backend/app/api/simulation.py653返回:deliberatebackend-docstringSimulation
323backend/app/api/simulation.py661"already_prepared": true|false, // 是否已有完成的准备review-neededbackend-stringSimulation
324backend/app/api/simulation.py662"prepare_info": {...} // 已准备完成时的详细信息review-neededbackend-stringSimulation
325backend/app/api/simulation.py674# 如果提供了simulation_id先检查是否已准备完成deliberatebackend-commentSimulation
326backend/app/api/simulation.py684"message": "已有完成的准备工作",review-neededbackend-stringSimulation
327backend/app/api/simulation.py690# 如果没有task_id返回错误deliberatebackend-commentSimulation
328backend/app/api/simulation.py693# 有simulation_id但未准备完成deliberatebackend-commentSimulation
329backend/app/api/simulation.py700"message": "尚未开始准备,请调用 /api/simulation/prepare 开始",review-neededbackend-stringSimulation
330backend/app/api/simulation.py713# 任务不存在但如果有simulation_id检查是否已准备完成deliberatebackend-commentSimulation
331backend/app/api/simulation.py724"message": "任务已完成(准备工作已存在)",review-neededbackend-stringSimulation
332backend/app/api/simulation.py753"""获取模拟状态"""deliberatebackend-docstringSimulation
333backend/app/api/simulation.py766# 如果模拟已准备好,附加运行说明deliberatebackend-commentSimulation
334backend/app/api/simulation.py787列出所有模拟deliberatebackend-docstringSimulation
335backend/app/api/simulation.py789Query参数deliberatebackend-docstringSimulation
336backend/app/api/simulation.py790project_id: 按项目ID过滤可选deliberatebackend-docstringSimulation
337backend/app/api/simulation.py815获取 simulation 对应的最新 report_iddeliberatebackend-docstringSimulation
338backend/app/api/simulation.py817遍历 reports 目录,找出 simulation_id 匹配的 reportdeliberatebackend-docstringSimulation
339backend/app/api/simulation.py818如果有多个则返回最新的(按 created_at 排序)deliberatebackend-docstringSimulation
340backend/app/api/simulation.py821simulation_id: 模拟IDdeliberatebackend-docstringSimulation
341backend/app/api/simulation.py824report_id 或 Nonedeliberatebackend-docstringSimulation
342backend/app/api/simulation.py829# reports 目录路径backend/uploads/reportsdeliberatebackend-commentSimulation
343backend/app/api/simulation.py830# __file__ 是 app/api/simulation.py需要向上两级到 backend/deliberatebackend-commentSimulation
344backend/app/api/simulation.py863# 按创建时间倒序排序,返回最新的deliberatebackend-commentSimulation
345backend/app/api/simulation.py875获取历史模拟列表(带项目详情)deliberatebackend-docstringSimulation
346backend/app/api/simulation.py877用于首页历史项目展示,返回包含项目名称、描述等丰富信息的模拟列表deliberatebackend-docstringSimulation
347backend/app/api/simulation.py879Query参数deliberatebackend-docstringSimulation
348backend/app/api/simulation.py880limit: 返回数量限制默认20deliberatebackend-docstringSimulation
349backend/app/api/simulation.py882返回:deliberatebackend-docstringSimulation
350backend/app/api/simulation.py889"project_name": "武大舆情分析",review-neededbackend-stringSimulation
351backend/app/api/simulation.py890"simulation_requirement": "如果武汉大学发布...",review-neededbackend-stringSimulation
352backend/app/api/simulation.py913# 增强模拟数据,只从 Simulation 文件读取deliberatebackend-commentSimulation
353backend/app/api/simulation.py918# 获取模拟配置信息(从 simulation_config.json 读取 simulation_requirementdeliberatebackend-commentSimulation
354backend/app/api/simulation.py924# 推荐轮数(后备值)deliberatebackend-commentSimulation
355backend/app/api/simulation.py934# 获取运行状态(从 run_state.json 读取用户设置的实际轮数)deliberatebackend-commentSimulation
356backend/app/api/simulation.py939# 使用用户设置的 total_rounds若无则使用推荐轮数deliberatebackend-commentSimulation
357backend/app/api/simulation.py946# 获取关联项目的文件列表最多3个deliberatebackend-commentSimulation
358backend/app/api/simulation.py950{"filename": f.get("filename", "未知文件")}review-neededbackend-stringSimulation
359backend/app/api/simulation.py956# 获取关联的 report_id查找该 simulation 最新的 reportdeliberatebackend-commentSimulation
360backend/app/api/simulation.py959# 添加版本号deliberatebackend-commentSimulation
361backend/app/api/simulation.py962# 格式化日期deliberatebackend-commentSimulation
362backend/app/api/simulation.py989获取模拟的Agent Profiledeliberatebackend-docstringSimulation
363backend/app/api/simulation.py991Query参数deliberatebackend-docstringSimulation
364backend/app/api/simulation.py992platform: 平台类型reddit/twitter默认redditdeliberatebackend-docstringSimulation
365backend/app/api/simulation.py1027实时获取模拟的Agent Profile用于在生成过程中实时查看进度deliberatebackend-docstringSimulation
366backend/app/api/simulation.py1029与 /profiles 接口的区别:deliberatebackend-docstringSimulation
367backend/app/api/simulation.py1030- 直接读取文件,不经过 SimulationManagerdeliberatebackend-docstringSimulation
368backend/app/api/simulation.py1031- 适用于生成过程中的实时查看deliberatebackend-docstringSimulation
369backend/app/api/simulation.py1032- 返回额外的元数据(如文件修改时间、是否正在生成等)deliberatebackend-docstringSimulation
370backend/app/api/simulation.py1034Query参数deliberatebackend-docstringSimulation
371backend/app/api/simulation.py1035platform: 平台类型reddit/twitter默认redditdeliberatebackend-docstringSimulation
372backend/app/api/simulation.py1037返回:deliberatebackend-docstringSimulation
373backend/app/api/simulation.py1044"total_expected": 93, // 预期总数(如果有)review-neededbackend-stringSimulation
374backend/app/api/simulation.py1045"is_generating": true, // 是否正在生成review-neededbackend-stringSimulation
375backend/app/api/simulation.py1059# 获取模拟目录deliberatebackend-commentSimulation
376backend/app/api/simulation.py1068# 确定文件路径deliberatebackend-commentSimulation
377backend/app/api/simulation.py1074# 检查文件是否存在deliberatebackend-commentSimulation
378backend/app/api/simulation.py1080# 获取文件修改时间deliberatebackend-commentSimulation
379backend/app/api/simulation.py1096# 检查是否正在生成(通过 state.json 判断)deliberatebackend-commentSimulation
380backend/app/api/simulation.py1137实时获取模拟配置(用于在生成过程中实时查看进度)deliberatebackend-docstringSimulation
381backend/app/api/simulation.py1139与 /config 接口的区别:deliberatebackend-docstringSimulation
382backend/app/api/simulation.py1140- 直接读取文件,不经过 SimulationManagerdeliberatebackend-docstringSimulation
383backend/app/api/simulation.py1141- 适用于生成过程中的实时查看deliberatebackend-docstringSimulation
384backend/app/api/simulation.py1142- 返回额外的元数据(如文件修改时间、是否正在生成等)deliberatebackend-docstringSimulation
385backend/app/api/simulation.py1143- 即使配置还没生成完也能返回部分信息deliberatebackend-docstringSimulation
386backend/app/api/simulation.py1145返回:deliberatebackend-docstringSimulation
387backend/app/api/simulation.py1152"is_generating": true, // 是否正在生成review-neededbackend-stringSimulation
388backend/app/api/simulation.py1153"generation_stage": "generating_config", // 当前生成阶段review-neededbackend-stringSimulation
389backend/app/api/simulation.py1154"config": {...} // 配置内容(如果存在)review-neededbackend-stringSimulation
390backend/app/api/simulation.py1162# 获取模拟目录deliberatebackend-commentSimulation
391backend/app/api/simulation.py1171# 配置文件路径deliberatebackend-commentSimulation
392backend/app/api/simulation.py1174# 检查文件是否存在deliberatebackend-commentSimulation
393backend/app/api/simulation.py1180# 获取文件修改时间deliberatebackend-commentSimulation
394backend/app/api/simulation.py1191# 检查是否正在生成(通过 state.json 判断)deliberatebackend-commentSimulation
395backend/app/api/simulation.py1205# 判断当前阶段deliberatebackend-commentSimulation
396backend/app/api/simulation.py1216# 构建返回数据deliberatebackend-commentSimulation
397backend/app/api/simulation.py1227# 如果配置存在,提取一些关键统计信息deliberatebackend-commentSimulation
398backend/app/api/simulation.py1257获取模拟配置LLM智能生成的完整配置deliberatebackend-docstringSimulation
399backend/app/api/simulation.py1259返回包含:deliberatebackend-docstringSimulation
400backend/app/api/simulation.py1260- time_config: 时间配置(模拟时长、轮次、高峰/低谷时段)deliberatebackend-docstringSimulation
401backend/app/api/simulation.py1261- agent_configs: 每个Agent的活动配置活跃度、发言频率、立场等deliberatebackend-docstringSimulation
402backend/app/api/simulation.py1262- event_config: 事件配置(初始帖子、热点话题)deliberatebackend-docstringSimulation
403backend/app/api/simulation.py1263- platform_configs: 平台配置deliberatebackend-docstringSimulation
404backend/app/api/simulation.py1264- generation_reasoning: LLM的配置推理说明deliberatebackend-docstringSimulation
405backend/app/api/simulation.py1292"""下载模拟配置文件"""deliberatebackend-docstringSimulation
406backend/app/api/simulation.py1322下载模拟运行脚本文件(通用脚本,位于 backend/scripts/deliberatebackend-docstringSimulation
407backend/app/api/simulation.py1324script_name可选值deliberatebackend-docstringSimulation
408backend/app/api/simulation.py1331# 脚本位于 backend/scripts/ 目录deliberatebackend-commentSimulation
409backend/app/api/simulation.py1334# 验证脚本名称deliberatebackend-commentSimulation
410backend/app/api/simulation.py1371# ============== Profile生成接口独立使用 ==============deliberatebackend-commentSimulation
411backend/app/api/simulation.py1376直接从图谱生成OASIS Agent Profile不创建模拟deliberatebackend-docstringSimulation
412backend/app/api/simulation.py1378请求JSONdeliberatebackend-docstringSimulation
413backend/app/api/simulation.py1380"graph_id": "mirofish_xxxx", // 必填review-neededbackend-stringSimulation
414backend/app/api/simulation.py1381"entity_types": ["Student"], // 可选review-neededbackend-stringSimulation
415backend/app/api/simulation.py1382"use_llm": true, // 可选review-neededbackend-stringSimulation
416backend/app/api/simulation.py1383"platform": "reddit" // 可选review-neededbackend-stringSimulation
417backend/app/api/simulation.py1445# ============== 模拟运行控制接口 ==============deliberatebackend-commentSimulation
418backend/app/api/simulation.py1450开始运行模拟deliberatebackend-docstringSimulation
419backend/app/api/simulation.py1452请求JSONdeliberatebackend-docstringSimulation
420backend/app/api/simulation.py1454"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
421backend/app/api/simulation.py1455"platform": "parallel", // 可选: twitter / reddit / parallel (默认)review-neededbackend-stringSimulation
422backend/app/api/simulation.py1456"max_rounds": 100, // 可选: 最大模拟轮数,用于截断过长的模拟review-neededbackend-stringSimulation
423backend/app/api/simulation.py1457"enable_graph_memory_update": false, // 可选: 是否将Agent活动动态更新到Zep图谱记忆review-neededbackend-stringSimulation
424backend/app/api/simulation.py1458"force": false // 可选: 强制重新开始(会停止运行中的模拟并清理日志)review-neededbackend-stringSimulation
425backend/app/api/simulation.py1461关于 force 参数:deliberatebackend-docstringSimulation
426backend/app/api/simulation.py1462- 启用后,如果模拟正在运行或已完成,会先停止并清理运行日志deliberatebackend-docstringSimulation
427backend/app/api/simulation.py1463- 清理的内容包括run_state.json, actions.jsonl, simulation.log 等deliberatebackend-docstringSimulation
428backend/app/api/simulation.py1464- 不会清理配置文件simulation_config.json和 profile 文件deliberatebackend-docstringSimulation
429backend/app/api/simulation.py1465- 适用于需要重新运行模拟的场景deliberatebackend-docstringSimulation
430backend/app/api/simulation.py1467关于 enable_graph_memory_updatedeliberatebackend-docstringSimulation
431backend/app/api/simulation.py1468- 启用后模拟中所有Agent的活动发帖、评论、点赞等都会实时更新到Zep图谱deliberatebackend-docstringSimulation
432backend/app/api/simulation.py1469- 这可以让图谱"记住"模拟过程用于后续分析或AI对话review-neededbackend-stringSimulation
433backend/app/api/simulation.py1470- 需要模拟关联的项目有有效的 graph_iddeliberatebackend-docstringSimulation
434backend/app/api/simulation.py1471- 采用批量更新机制减少API调用次数deliberatebackend-docstringSimulation
435backend/app/api/simulation.py1473返回:deliberatebackend-docstringSimulation
436backend/app/api/simulation.py1483"graph_memory_update_enabled": true, // 是否启用了图谱记忆更新review-neededbackend-stringSimulation
437backend/app/api/simulation.py1484"force_restarted": true // 是否是强制重新开始review-neededbackend-stringSimulation
438backend/app/api/simulation.py1499max_rounds = data.get('max_rounds') # 可选:最大模拟轮数review-neededbackend-stringSimulation
439backend/app/api/simulation.py1500enable_graph_memory_update = data.get('enable_graph_memory_update', False) # 可选:是否启用图谱记忆更新review-neededbackend-stringSimulation
440backend/app/api/simulation.py1501force = data.get('force', False) # 可选:强制重新开始review-neededbackend-stringSimulation
441backend/app/api/simulation.py1503# 验证 max_rounds 参数deliberatebackend-commentSimulation
442backend/app/api/simulation.py1524# 检查模拟是否已准备好deliberatebackend-commentSimulation
443backend/app/api/simulation.py1536# 智能处理状态:如果准备工作已完成,允许重新启动deliberatebackend-commentSimulation
444backend/app/api/simulation.py1538# 检查准备工作是否已完成deliberatebackend-commentSimulation
445backend/app/api/simulation.py1542# 准备工作已完成,检查是否有正在运行的进程deliberatebackend-commentSimulation
446backend/app/api/simulation.py1544# 检查模拟进程是否真的在运行deliberatebackend-commentSimulation
447backend/app/api/simulation.py1547# 进程确实在运行deliberatebackend-commentSimulation
448backend/app/api/simulation.py1549# 强制模式:停止运行中的模拟deliberatebackend-commentSimulation
449backend/app/api/simulation.py1561# 如果是强制模式,清理运行日志deliberatebackend-commentSimulation
450backend/app/api/simulation.py1569# 进程不存在或已结束,重置状态为 readydeliberatebackend-commentSimulation
451backend/app/api/simulation.py1574# 准备工作未完成deliberatebackend-commentSimulation
452backend/app/api/simulation.py1580# 获取图谱ID用于图谱记忆更新deliberatebackend-commentSimulation
453backend/app/api/simulation.py1583# 从模拟状态或项目中获取 graph_iddeliberatebackend-commentSimulation
454backend/app/api/simulation.py1586# 尝试从项目中获取deliberatebackend-commentSimulation
455backend/app/api/simulation.py1599# 启动模拟deliberatebackend-commentSimulation
456backend/app/api/simulation.py1608# 更新模拟状态deliberatebackend-commentSimulation
457backend/app/api/simulation.py1643停止模拟deliberatebackend-docstringSimulation
458backend/app/api/simulation.py1645请求JSONdeliberatebackend-docstringSimulation
459backend/app/api/simulation.py1647"simulation_id": "sim_xxxx" // 必填模拟IDreview-neededbackend-stringSimulation
460backend/app/api/simulation.py1650返回:deliberatebackend-docstringSimulation
461backend/app/api/simulation.py1672# 更新模拟状态deliberatebackend-commentSimulation
462backend/app/api/simulation.py1699# ============== 实时状态监控接口 ==============deliberatebackend-commentSimulation
463backend/app/api/simulation.py1704获取模拟运行实时状态(用于前端轮询)deliberatebackend-docstringSimulation
464backend/app/api/simulation.py1706返回:deliberatebackend-docstringSimulation
465backend/app/api/simulation.py1762获取模拟运行详细状态(包含所有动作)deliberatebackend-docstringSimulation
466backend/app/api/simulation.py1764用于前端展示实时动态deliberatebackend-docstringSimulation
467backend/app/api/simulation.py1766Query参数deliberatebackend-docstringSimulation
468backend/app/api/simulation.py1767platform: 过滤平台twitter/reddit可选deliberatebackend-docstringSimulation
469backend/app/api/simulation.py1769返回:deliberatebackend-docstringSimulation
470backend/app/api/simulation.py1791"twitter_actions": [...], # Twitter 平台的所有动作review-neededbackend-stringSimulation
471backend/app/api/simulation.py1792"reddit_actions": [...] # Reddit 平台的所有动作review-neededbackend-stringSimulation
472backend/app/api/simulation.py1812# 获取完整的动作列表deliberatebackend-commentSimulation
473backend/app/api/simulation.py1818# 分平台获取动作deliberatebackend-commentSimulation
474backend/app/api/simulation.py1829# 获取当前轮次的动作recent_actions 只展示最新一轮)deliberatebackend-commentSimulation
475backend/app/api/simulation.py1837# 获取基础状态信息deliberatebackend-commentSimulation
476backend/app/api/simulation.py1843# recent_actions 只展示当前最新一轮两个平台的内容deliberatebackend-commentSimulation
477backend/app/api/simulation.py1863获取模拟中的Agent动作历史deliberatebackend-docstringSimulation
478backend/app/api/simulation.py1865Query参数deliberatebackend-docstringSimulation
479backend/app/api/simulation.py1866limit: 返回数量默认100deliberatebackend-docstringSimulation
480backend/app/api/simulation.py1867offset: 偏移量默认0deliberatebackend-docstringSimulation
481backend/app/api/simulation.py1868platform: 过滤平台twitter/redditdeliberatebackend-docstringSimulation
482backend/app/api/simulation.py1869agent_id: 过滤Agent IDdeliberatebackend-docstringSimulation
483backend/app/api/simulation.py1870round_num: 过滤轮次deliberatebackend-docstringSimulation
484backend/app/api/simulation.py1872返回:deliberatebackend-docstringSimulation
485backend/app/api/simulation.py1917获取模拟时间线(按轮次汇总)deliberatebackend-docstringSimulation
486backend/app/api/simulation.py1919用于前端展示进度条和时间线视图deliberatebackend-docstringSimulation
487backend/app/api/simulation.py1921Query参数deliberatebackend-docstringSimulation
488backend/app/api/simulation.py1922start_round: 起始轮次默认0deliberatebackend-docstringSimulation
489backend/app/api/simulation.py1923end_round: 结束轮次(默认全部)deliberatebackend-docstringSimulation
490backend/app/api/simulation.py1925返回每轮的汇总信息deliberatebackend-docstringSimulation
491backend/app/api/simulation.py1957获取每个Agent的统计信息deliberatebackend-docstringSimulation
492backend/app/api/simulation.py1959用于前端展示Agent活跃度排行、动作分布等deliberatebackend-docstringSimulation
493backend/app/api/simulation.py1981# ============== 数据库查询接口 ==============deliberatebackend-commentSimulation
494backend/app/api/simulation.py1986获取模拟中的帖子deliberatebackend-docstringSimulation
495backend/app/api/simulation.py1988Query参数deliberatebackend-docstringSimulation
496backend/app/api/simulation.py1989platform: 平台类型twitter/redditdeliberatebackend-docstringSimulation
497backend/app/api/simulation.py1990limit: 返回数量默认50deliberatebackend-docstringSimulation
498backend/app/api/simulation.py1991offset: 偏移量deliberatebackend-docstringSimulation
499backend/app/api/simulation.py1993返回帖子列表从SQLite数据库读取deliberatebackend-docstringSimulation
500backend/app/api/simulation.py2015"message": "数据库不存在,模拟可能尚未运行"review-neededbackend-stringSimulation
501backend/app/api/simulation.py2064获取模拟中的评论仅Redditdeliberatebackend-docstringSimulation
502backend/app/api/simulation.py2066Query参数deliberatebackend-docstringSimulation
503backend/app/api/simulation.py2067post_id: 过滤帖子ID可选deliberatebackend-docstringSimulation
504backend/app/api/simulation.py2068limit: 返回数量deliberatebackend-docstringSimulation
505backend/app/api/simulation.py2069offset: 偏移量deliberatebackend-docstringSimulation
506backend/app/api/simulation.py2136# ============== Interview 采访接口 ==============deliberatebackend-commentSimulation
507backend/app/api/simulation.py2141采访单个Agentdeliberatebackend-docstringSimulation
508backend/app/api/simulation.py2143注意:此功能需要模拟环境处于运行状态(完成模拟循环后进入等待命令模式)deliberatebackend-docstringSimulation
509backend/app/api/simulation.py2145请求JSONdeliberatebackend-docstringSimulation
510backend/app/api/simulation.py2147"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
511backend/app/api/simulation.py2148"agent_id": 0, // 必填Agent IDreview-neededbackend-stringSimulation
512backend/app/api/simulation.py2149"prompt": "你对这件事有什么看法?", // 必填,采访问题review-neededbackend-stringSimulation
513backend/app/api/simulation.py2150"platform": "twitter", // 可选指定平台twitter/redditreview-neededbackend-stringSimulation
514backend/app/api/simulation.py2151// 不指定时:双平台模拟同时采访两个平台deliberatebackend-docstringSimulation
515backend/app/api/simulation.py2152"timeout": 60 // 可选超时时间默认60review-neededbackend-stringSimulation
516backend/app/api/simulation.py2155返回不指定platform双平台模式deliberatebackend-docstringSimulation
517backend/app/api/simulation.py2160"prompt": "你对这件事有什么看法?",review-neededbackend-stringSimulation
518backend/app/api/simulation.py2173返回指定platformdeliberatebackend-docstringSimulation
519backend/app/api/simulation.py2178"prompt": "你对这件事有什么看法?",review-neededbackend-stringSimulation
520backend/app/api/simulation.py2181"response": "我认为...",review-neededbackend-stringSimulation
521backend/app/api/simulation.py2195platform = data.get('platform') # 可选twitter/reddit/Nonereview-neededbackend-stringSimulation
522backend/app/api/simulation.py2216# 验证platform参数deliberatebackend-commentSimulation
523backend/app/api/simulation.py2223# 检查环境状态deliberatebackend-commentSimulation
524backend/app/api/simulation.py2230# 优化prompt添加前缀避免Agent调用工具deliberatebackend-commentSimulation
525backend/app/api/simulation.py2270批量采访多个Agentdeliberatebackend-docstringSimulation
526backend/app/api/simulation.py2272注意:此功能需要模拟环境处于运行状态deliberatebackend-docstringSimulation
527backend/app/api/simulation.py2274请求JSONdeliberatebackend-docstringSimulation
528backend/app/api/simulation.py2276"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
529backend/app/api/simulation.py2277"interviews": [ // 必填,采访列表review-neededbackend-stringSimulation
530backend/app/api/simulation.py2280"prompt": "你对A有什么看法",review-neededbackend-stringSimulation
531backend/app/api/simulation.py2281"platform": "twitter" // 可选指定该Agent的采访平台review-neededbackend-stringSimulation
532backend/app/api/simulation.py2285"prompt": "你对B有什么看法" // 不指定platform则使用默认值review-neededbackend-stringSimulation
533backend/app/api/simulation.py2288"platform": "reddit", // 可选默认平台被每项的platform覆盖review-neededbackend-stringSimulation
534backend/app/api/simulation.py2289// 不指定时双平台模拟每个Agent同时采访两个平台deliberatebackend-docstringSimulation
535backend/app/api/simulation.py2290"timeout": 120 // 可选超时时间默认120review-neededbackend-stringSimulation
536backend/app/api/simulation.py2293返回:deliberatebackend-docstringSimulation
537backend/app/api/simulation.py2316platform = data.get('platform') # 可选twitter/reddit/Nonereview-neededbackend-stringSimulation
538backend/app/api/simulation.py2331# 验证platform参数deliberatebackend-commentSimulation
539backend/app/api/simulation.py2338# 验证每个采访项deliberatebackend-commentSimulation
540backend/app/api/simulation.py2350# 验证每项的platform如果有deliberatebackend-commentSimulation
541backend/app/api/simulation.py2358# 检查环境状态deliberatebackend-commentSimulation
542backend/app/api/simulation.py2365# 优化每个采访项的prompt添加前缀避免Agent调用工具deliberatebackend-commentSimulation
543backend/app/api/simulation.py2408全局采访 - 使用相同问题采访所有Agentdeliberatebackend-docstringSimulation
544backend/app/api/simulation.py2410注意:此功能需要模拟环境处于运行状态deliberatebackend-docstringSimulation
545backend/app/api/simulation.py2412请求JSONdeliberatebackend-docstringSimulation
546backend/app/api/simulation.py2414"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
547backend/app/api/simulation.py2415"prompt": "你对这件事整体有什么看法?", // 必填采访问题所有Agent使用相同问题review-neededbackend-stringSimulation
548backend/app/api/simulation.py2416"platform": "reddit", // 可选指定平台twitter/redditreview-neededbackend-stringSimulation
549backend/app/api/simulation.py2417// 不指定时双平台模拟每个Agent同时采访两个平台deliberatebackend-docstringSimulation
550backend/app/api/simulation.py2418"timeout": 180 // 可选超时时间默认180review-neededbackend-stringSimulation
551backend/app/api/simulation.py2421返回:deliberatebackend-docstringSimulation
552backend/app/api/simulation.py2443platform = data.get('platform') # 可选twitter/reddit/Nonereview-neededbackend-stringSimulation
553backend/app/api/simulation.py2458# 验证platform参数deliberatebackend-commentSimulation
554backend/app/api/simulation.py2465# 检查环境状态deliberatebackend-commentSimulation
555backend/app/api/simulation.py2472# 优化prompt添加前缀避免Agent调用工具deliberatebackend-commentSimulation
556backend/app/api/simulation.py2511获取Interview历史记录deliberatebackend-docstringSimulation
557backend/app/api/simulation.py2513从模拟数据库中读取所有Interview记录deliberatebackend-docstringSimulation
558backend/app/api/simulation.py2515请求JSONdeliberatebackend-docstringSimulation
559backend/app/api/simulation.py2517"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
560backend/app/api/simulation.py2518"platform": "reddit", // 可选平台类型reddit/twitterreview-neededbackend-stringSimulation
561backend/app/api/simulation.py2519// 不指定则返回两个平台的所有历史deliberatebackend-docstringSimulation
562backend/app/api/simulation.py2520"agent_id": 0, // 可选只获取该Agent的采访历史review-neededbackend-stringSimulation
563backend/app/api/simulation.py2521"limit": 100 // 可选返回数量默认100review-neededbackend-stringSimulation
564backend/app/api/simulation.py2524返回:deliberatebackend-docstringSimulation
565backend/app/api/simulation.py2532"response": "我认为...",review-neededbackend-stringSimulation
566backend/app/api/simulation.py2533"prompt": "你对这件事有什么看法?",review-neededbackend-stringSimulation
567backend/app/api/simulation.py2546platform = data.get('platform') # 不指定则返回两个平台的历史review-neededbackend-stringSimulation
568backend/app/api/simulation.py2583获取模拟环境状态deliberatebackend-docstringSimulation
569backend/app/api/simulation.py2585检查模拟环境是否存活可以接收Interview命令deliberatebackend-docstringSimulation
570backend/app/api/simulation.py2587请求JSONdeliberatebackend-docstringSimulation
571backend/app/api/simulation.py2589"simulation_id": "sim_xxxx" // 必填模拟IDreview-neededbackend-stringSimulation
572backend/app/api/simulation.py2592返回:deliberatebackend-docstringSimulation
573backend/app/api/simulation.py2600"message": "环境正在运行可以接收Interview命令"review-neededbackend-stringSimulation
574backend/app/api/simulation.py2617# 获取更详细的状态信息deliberatebackend-commentSimulation
575backend/app/api/simulation.py2621message = "环境正在运行可以接收Interview命令"review-neededbackend-stringSimulation
576backend/app/api/simulation.py2623message = "环境未运行或已关闭"review-neededbackend-stringSimulation
577backend/app/api/simulation.py2648关闭模拟环境deliberatebackend-docstringSimulation
578backend/app/api/simulation.py2650向模拟发送关闭环境命令,使其优雅退出等待命令模式。deliberatebackend-docstringSimulation
579backend/app/api/simulation.py2652注意:这不同于 /stop 接口,/stop 会强制终止进程,deliberatebackend-docstringSimulation
580backend/app/api/simulation.py2653而此接口会让模拟优雅地关闭环境并退出。deliberatebackend-docstringSimulation
581backend/app/api/simulation.py2655请求JSONdeliberatebackend-docstringSimulation
582backend/app/api/simulation.py2657"simulation_id": "sim_xxxx", // 必填模拟IDreview-neededbackend-stringSimulation
583backend/app/api/simulation.py2658"timeout": 30 // 可选超时时间默认30review-neededbackend-stringSimulation
584backend/app/api/simulation.py2661返回:deliberatebackend-docstringSimulation
585backend/app/api/simulation.py2665"message": "环境关闭命令已发送",review-neededbackend-stringSimulation
586backend/app/api/simulation.py2688# 更新模拟状态deliberatebackend-commentSimulation
587backend/app/config.py2配置管理deliberatebackend-docstringn/a
588backend/app/config.py3统一从项目根目录的 .env 文件加载配置deliberatebackend-docstringn/a
589backend/app/config.py9# 加载项目根目录的 .env 文件deliberatebackend-commentn/a
590backend/app/config.py10# 路径: MiroFish/.env (相对于 backend/app/config.py)deliberatebackend-commentn/a
591backend/app/config.py16# 如果根目录没有 .env尝试加载环境变量用于生产环境deliberatebackend-commentn/a
592backend/app/config.py21"""Flask配置类"""deliberatebackend-docstringn/a
593backend/app/config.py23# Flask配置deliberatebackend-commentn/a
594backend/app/config.py27# JSON配置 - 禁用ASCII转义让中文直接显示而不是 \uXXXX 格式)deliberatebackend-commentn/a
595backend/app/config.py30# LLM配置统一使用OpenAI格式deliberatebackend-commentn/a
596backend/app/config.py35# Neo4j + Graphiti配置替代 Zep Clouddeliberatebackend-commentn/a
597backend/app/config.py53# Zep配置保留兼容性已废弃deliberatebackend-commentn/a
598backend/app/config.py56# 文件上传配置deliberatebackend-commentn/a
599backend/app/config.py61# 文本处理配置deliberatebackend-commentn/a
600backend/app/config.py62DEFAULT_CHUNK_SIZE = 500 # 默认切块大小deliberatebackend-docstringn/a
601backend/app/config.py63DEFAULT_CHUNK_OVERLAP = 50 # 默认重叠大小deliberatebackend-docstringn/a
602backend/app/config.py65# OASIS模拟配置deliberatebackend-commentn/a
603backend/app/config.py69# OASIS平台可用动作配置deliberatebackend-commentn/a
604backend/app/config.py79# Report Agent配置deliberatebackend-commentn/a
605backend/app/config.py86"""验证必要配置"""deliberatebackend-docstringn/a
606backend/app/config.py89errors.append("LLM_API_KEY 未配置")review-neededbackend-stringn/a
607backend/app/config.py91errors.append("NEO4J_PASSWORD 未配置")review-neededbackend-stringn/a
608backend/app/models/__init__.py2数据模型模块deliberatebackend-docstringn/a
609backend/app/models/project.py2项目上下文管理deliberatebackend-docstringn/a
610backend/app/models/project.py3用于在服务端持久化项目状态,避免前端在接口间传递大量数据deliberatebackend-docstringn/a
611backend/app/models/project.py18"""项目状态"""deliberatebackend-docstringn/a
612backend/app/models/project.py19CREATED = "created" # 刚创建,文件已上传review-neededbackend-stringn/a
613backend/app/models/project.py20ONTOLOGY_GENERATED = "ontology_generated" # 本体已生成review-neededbackend-stringn/a
614backend/app/models/project.py21GRAPH_BUILDING = "graph_building" # 图谱构建中review-neededbackend-stringn/a
615backend/app/models/project.py22GRAPH_COMPLETED = "graph_completed" # 图谱构建完成review-neededbackend-stringn/a
616backend/app/models/project.py23FAILED = "failed" # 失败review-neededbackend-stringn/a
617backend/app/models/project.py28"""项目数据模型"""deliberatebackend-docstringn/a
618backend/app/models/project.py35# 文件信息deliberatebackend-commentn/a
619backend/app/models/project.py39# 本体信息接口1生成后填充deliberatebackend-commentn/a
620backend/app/models/project.py43# 图谱信息接口2完成后填充deliberatebackend-commentn/a
621backend/app/models/project.py47# 配置deliberatebackend-commentn/a
622backend/app/models/project.py52# 错误信息deliberatebackend-commentn/a
623backend/app/models/project.py56"""转换为字典"""deliberatebackend-docstringn/a
624backend/app/models/project.py77"""从字典创建"""deliberatebackend-docstringn/a
625backend/app/models/project.py102"""项目管理器 - 负责项目的持久化存储和检索"""deliberatebackend-docstringn/a
626backend/app/models/project.py104# 项目存储根目录deliberatebackend-commentn/a
627backend/app/models/project.py109"""确保项目目录存在"""deliberatebackend-docstringn/a
628backend/app/models/project.py114"""获取项目目录路径"""deliberatebackend-docstringn/a
629backend/app/models/project.py119"""获取项目元数据文件路径"""deliberatebackend-docstringn/a
630backend/app/models/project.py124"""获取项目文件存储目录"""deliberatebackend-docstringn/a
631backend/app/models/project.py129"""获取项目提取文本存储路径"""deliberatebackend-docstringn/a
632backend/app/models/project.py135创建新项目deliberatebackend-docstringn/a
633backend/app/models/project.py138name: 项目名称deliberatebackend-docstringn/a
634backend/app/models/project.py141新创建的Project对象deliberatebackend-docstringn/a
635backend/app/models/project.py156# 创建项目目录结构deliberatebackend-commentn/a
636backend/app/models/project.py162# 保存项目元数据deliberatebackend-commentn/a
637backend/app/models/project.py169"""保存项目元数据"""deliberatebackend-docstringn/a
638backend/app/models/project.py179获取项目deliberatebackend-docstringn/a
639backend/app/models/project.py182project_id: 项目IDdeliberatebackend-docstringn/a
640backend/app/models/project.py185Project对象如果不存在返回Nonedeliberatebackend-docstringn/a
641backend/app/models/project.py200列出所有项目deliberatebackend-docstringn/a
642backend/app/models/project.py203limit: 返回数量限制deliberatebackend-docstringn/a
643backend/app/models/project.py206项目列表,按创建时间倒序deliberatebackend-docstringn/a
644backend/app/models/project.py216# 按创建时间倒序排序deliberatebackend-commentn/a
645backend/app/models/project.py224删除项目及其所有文件deliberatebackend-docstringn/a
646backend/app/models/project.py227project_id: 项目IDdeliberatebackend-docstringn/a
647backend/app/models/project.py230是否删除成功deliberatebackend-docstringn/a
648backend/app/models/project.py243保存上传的文件到项目目录deliberatebackend-docstringn/a
649backend/app/models/project.py246project_id: 项目IDdeliberatebackend-docstringn/a
650backend/app/models/project.py247file_storage: Flask的FileStorage对象deliberatebackend-docstringn/a
651backend/app/models/project.py248original_filename: 原始文件名deliberatebackend-docstringn/a
652backend/app/models/project.py251文件信息字典 {filename, path, size}deliberatebackend-docstringn/a
653backend/app/models/project.py256# 生成安全的文件名deliberatebackend-commentn/a
654backend/app/models/project.py261# 保存文件deliberatebackend-commentn/a
655backend/app/models/project.py264# 获取文件大小deliberatebackend-commentn/a
656backend/app/models/project.py276"""保存提取的文本"""deliberatebackend-docstringn/a
657backend/app/models/project.py283"""获取提取的文本"""deliberatebackend-docstringn/a
658backend/app/models/project.py294"""获取项目的所有文件路径"""deliberatebackend-docstringn/a
659backend/app/models/task.py2任务状态管理deliberatebackend-docstringn/a
660backend/app/models/task.py3用于跟踪长时间运行的任务(如图谱构建)deliberatebackend-docstringn/a
661backend/app/models/task.py17"""任务状态枚举"""deliberatebackend-docstringn/a
662backend/app/models/task.py18PENDING = "pending" # 等待中review-neededbackend-stringn/a
663backend/app/models/task.py19PROCESSING = "processing" # 处理中review-neededbackend-stringn/a
664backend/app/models/task.py20COMPLETED = "completed" # 已完成review-neededbackend-stringn/a
665backend/app/models/task.py21FAILED = "failed" # 失败review-neededbackend-stringn/a
666backend/app/models/task.py26"""任务数据类"""deliberatebackend-docstringn/a
667backend/app/models/task.py32progress: int = 0 # 总进度百分比 0-100deliberatebackend-docstringn/a
668backend/app/models/task.py33message: str = "" # 状态消息review-neededbackend-stringn/a
669backend/app/models/task.py34result: Optional[Dict] = None # 任务结果deliberatebackend-docstringn/a
670backend/app/models/task.py35error: Optional[str] = None # 错误信息deliberatebackend-docstringn/a
671backend/app/models/task.py36metadata: Dict = field(default_factory=dict) # 额外元数据deliberatebackend-docstringn/a
672backend/app/models/task.py37progress_detail: Dict = field(default_factory=dict) # 详细进度信息deliberatebackend-docstringn/a
673backend/app/models/task.py40"""转换为字典"""deliberatebackend-docstringn/a
674backend/app/models/task.py58任务管理器deliberatebackend-docstringn/a
675backend/app/models/task.py59线程安全的任务状态管理deliberatebackend-docstringn/a
676backend/app/models/task.py66"""单例模式"""deliberatebackend-docstringn/a
677backend/app/models/task.py77创建新任务deliberatebackend-docstringn/a
678backend/app/models/task.py80task_type: 任务类型deliberatebackend-docstringn/a
679backend/app/models/task.py81metadata: 额外元数据deliberatebackend-docstringn/a
680backend/app/models/task.py84任务IDdeliberatebackend-docstringn/a
681backend/app/models/task.py104"""获取任务"""deliberatebackend-docstringn/a
682backend/app/models/task.py119更新任务状态deliberatebackend-docstringn/a
683backend/app/models/task.py122task_id: 任务IDdeliberatebackend-docstringn/a
684backend/app/models/task.py123status: 新状态deliberatebackend-docstringn/a
685backend/app/models/task.py124progress: 进度deliberatebackend-docstringn/a
686backend/app/models/task.py125message: 消息deliberatebackend-docstringn/a
687backend/app/models/task.py126result: 结果deliberatebackend-docstringn/a
688backend/app/models/task.py127error: 错误信息deliberatebackend-docstringn/a
689backend/app/models/task.py128progress_detail: 详细进度信息deliberatebackend-docstringn/a
690backend/app/models/task.py148"""标记任务完成"""deliberatebackend-docstringn/a
691backend/app/models/task.py158"""标记任务失败"""deliberatebackend-docstringn/a
692backend/app/models/task.py167"""列出任务"""deliberatebackend-docstringn/a
693backend/app/models/task.py175"""清理旧任务"""deliberatebackend-docstringn/a
694backend/app/services/__init__.py2业务服务模块deliberatebackend-docstringn/a
695backend/app/services/graph_builder.py2图谱构建服务deliberatebackend-docstringGraph Build
696backend/app/services/graph_builder.py3接口2使用Zep API构建Standalone Graphdeliberatebackend-docstringGraph Build
697backend/app/services/graph_builder.py72"""图谱信息"""deliberatebackend-docstringGraph Build
698backend/app/services/graph_builder.py89图谱构建服务deliberatebackend-docstringGraph Build
699backend/app/services/graph_builder.py90负责调用Zep API构建知识图谱deliberatebackend-docstringGraph Build
700backend/app/services/graph_builder.py107异步构建图谱deliberatebackend-docstringGraph Build
701backend/app/services/graph_builder.py110text: 输入文本deliberatebackend-docstringGraph Build
702backend/app/services/graph_builder.py111ontology: 本体定义来自接口1的输出deliberatebackend-docstringGraph Build
703backend/app/services/graph_builder.py112graph_name: 图谱名称deliberatebackend-docstringGraph Build
704backend/app/services/graph_builder.py113chunk_size: 文本块大小deliberatebackend-docstringGraph Build
705backend/app/services/graph_builder.py114chunk_overlap: 块重叠大小deliberatebackend-docstringGraph Build
706backend/app/services/graph_builder.py115batch_size: 每批发送的块数量deliberatebackend-docstringGraph Build
707backend/app/services/graph_builder.py118任务IDdeliberatebackend-docstringGraph Build
708backend/app/services/graph_builder.py120# 创建任务deliberatebackend-commentGraph Build
709backend/app/services/graph_builder.py133# 在后台线程中执行构建deliberatebackend-commentGraph Build
710backend/app/services/graph_builder.py154"""图谱构建工作线程"""deliberatebackend-docstringGraph Build
711backend/app/services/graph_builder.py164# 1. 创建图谱deliberatebackend-commentGraph Build
712backend/app/services/graph_builder.py172# 2. 设置本体deliberatebackend-commentGraph Build
713backend/app/services/graph_builder.py180# 3. 文本分块deliberatebackend-commentGraph Build
714backend/app/services/graph_builder.py189# 4. 分批发送数据deliberatebackend-commentGraph Build
715backend/app/services/graph_builder.py199# 5. 等待Zep处理完成deliberatebackend-commentGraph Build
716backend/app/services/graph_builder.py215# 6. 获取图谱信息deliberatebackend-commentGraph Build
717backend/app/services/graph_builder.py224# 完成deliberatebackend-commentGraph Build
718backend/app/services/graph_builder.py237"""创建Zep图谱公开方法"""deliberatebackend-docstringGraph Build
719backend/app/services/graph_builder.py249"""设置图谱本体提示Graphiti自动提取实体本体作为提示存储"""deliberatebackend-docstringGraph Build
720backend/app/services/graph_builder.py264"""分批添加文本到图谱,返回所有 episode 的 uuid 列表。deliberatebackend-docstringGraph Build
721backend/app/services/graph_builder.py265skip_chunks: 跳过已处理的块数(用于断点续传)。"""review-neededbackend-stringGraph Build
722backend/app/services/graph_builder.py282# 构建episode数据deliberatebackend-commentGraph Build
723backend/app/services/graph_builder.py288# 发送到Zepdeliberatebackend-commentGraph Build
724backend/app/services/graph_builder.py295# 收集返回的 episode uuiddeliberatebackend-commentGraph Build
725backend/app/services/graph_builder.py302# 避免请求过快deliberatebackend-commentGraph Build
726backend/app/services/graph_builder.py318"""等待所有 episode 处理完成(通过查询每个 episode 的 processed 状态)"""deliberatebackend-docstringGraph Build
727backend/app/services/graph_builder.py341# 检查每个 episode 的处理状态deliberatebackend-commentGraph Build
728backend/app/services/graph_builder.py352# 忽略单个查询错误,继续deliberatebackend-commentGraph Build
729backend/app/services/graph_builder.py363time.sleep(3) # 每3秒检查一次deliberatebackend-docstringGraph Build
730backend/app/services/graph_builder.py369"""获取图谱信息"""deliberatebackend-docstringGraph Build
731backend/app/services/graph_builder.py370# 获取节点(分页)deliberatebackend-commentGraph Build
732backend/app/services/graph_builder.py373# 获取边(分页)deliberatebackend-commentGraph Build
733backend/app/services/graph_builder.py376# 统计实体类型deliberatebackend-commentGraph Build
734backend/app/services/graph_builder.py393获取完整图谱数据(包含详细信息)deliberatebackend-docstringGraph Build
735backend/app/services/graph_builder.py396graph_id: 图谱IDdeliberatebackend-docstringGraph Build
736backend/app/services/graph_builder.py399包含nodes和edges的字典包括时间信息、属性等详细数据deliberatebackend-docstringGraph Build
737backend/app/services/graph_builder.py404# 创建节点映射用于获取节点名称deliberatebackend-commentGraph Build
738backend/app/services/graph_builder.py411# 获取创建时间deliberatebackend-commentGraph Build
739backend/app/services/graph_builder.py432# 获取时间信息deliberatebackend-commentGraph Build
740backend/app/services/graph_builder.py438# 获取 episodesdeliberatebackend-commentGraph Build
741backend/app/services/graph_builder.py445# 获取 fact_typedeliberatebackend-commentGraph Build
742backend/app/services/graph_builder.py474"""删除图谱"""deliberatebackend-docstringGraph Build
743backend/app/services/oasis_profile_generator.py2OASIS Agent Profile生成器deliberatebackend-docstringEnv Setup
744backend/app/services/oasis_profile_generator.py3将Zep图谱中的实体转换为OASIS模拟平台所需的Agent Profile格式deliberatebackend-docstringEnv Setup
745backend/app/services/oasis_profile_generator.py5优化改进:deliberatebackend-docstringEnv Setup
746backend/app/services/oasis_profile_generator.py61. 调用Zep检索功能二次丰富节点信息deliberatebackend-docstringEnv Setup
747backend/app/services/oasis_profile_generator.py72. 优化提示词生成非常详细的人设deliberatebackend-docstringEnv Setup
748backend/app/services/oasis_profile_generator.py83. 区分个人实体和抽象群体实体deliberatebackend-docstringEnv Setup
749backend/app/services/oasis_profile_generator.py31"""OASIS Agent Profile数据结构"""deliberatebackend-docstringEnv Setup
750backend/app/services/oasis_profile_generator.py32# 通用字段deliberatebackend-commentEnv Setup
751backend/app/services/oasis_profile_generator.py39# 可选字段 - Reddit风格deliberatebackend-commentEnv Setup
752backend/app/services/oasis_profile_generator.py42# 可选字段 - Twitter风格deliberatebackend-commentEnv Setup
753backend/app/services/oasis_profile_generator.py47# 额外人设信息deliberatebackend-commentEnv Setup
754backend/app/services/oasis_profile_generator.py55# 来源实体信息deliberatebackend-commentEnv Setup
755backend/app/services/oasis_profile_generator.py62"""转换为Reddit平台格式"""deliberatebackend-docstringEnv Setup
756backend/app/services/oasis_profile_generator.py65"username": self.user_name, # OASIS 库要求字段名为 username无下划线gapbackend-prompt-labelEnv Setup
757backend/app/services/oasis_profile_generator.py73# 添加额外人设信息(如果有)deliberatebackend-commentEnv Setup
758backend/app/services/oasis_profile_generator.py90"""转换为Twitter平台格式"""deliberatebackend-docstringEnv Setup
759backend/app/services/oasis_profile_generator.py93"username": self.user_name, # OASIS 库要求字段名为 username无下划线gapbackend-prompt-labelEnv Setup
760backend/app/services/oasis_profile_generator.py103# 添加额外人设信息deliberatebackend-commentEnv Setup
761backend/app/services/oasis_profile_generator.py120"""转换为完整字典格式"""deliberatebackend-docstringEnv Setup
762backend/app/services/oasis_profile_generator.py145OASIS Profile生成器deliberatebackend-docstringEnv Setup
763backend/app/services/oasis_profile_generator.py147将Zep图谱中的实体转换为OASIS模拟所需的Agent Profiledeliberatebackend-docstringEnv Setup
764backend/app/services/oasis_profile_generator.py149优化特性:deliberatebackend-docstringEnv Setup
765backend/app/services/oasis_profile_generator.py1501. 调用Zep图谱检索功能获取更丰富的上下文deliberatebackend-docstringEnv Setup
766backend/app/services/oasis_profile_generator.py1512. 生成非常详细的人设(包括基本信息、职业经历、性格特征、社交媒体行为等)deliberatebackend-docstringEnv Setup
767backend/app/services/oasis_profile_generator.py1523. 区分个人实体和抽象群体实体deliberatebackend-docstringEnv Setup
768backend/app/services/oasis_profile_generator.py155# MBTI类型列表deliberatebackend-commentEnv Setup
769backend/app/services/oasis_profile_generator.py163# 常见国家列表deliberatebackend-commentEnv Setup
770backend/app/services/oasis_profile_generator.py169# 个人类型实体(需要生成具体人设)deliberatebackend-commentEnv Setup
771backend/app/services/oasis_profile_generator.py175# 群体/机构类型实体(需要生成群体代表人设)deliberatebackend-commentEnv Setup
772backend/app/services/oasis_profile_generator.py194raise ValueError("LLM_API_KEY 未配置")gapbackend-prompt-labelEnv Setup
773backend/app/services/oasis_profile_generator.py211从Zep实体生成OASIS Agent Profiledeliberatebackend-docstringEnv Setup
774backend/app/services/oasis_profile_generator.py214entity: Zep实体节点deliberatebackend-docstringEnv Setup
775backend/app/services/oasis_profile_generator.py215user_id: 用户ID用于OASISdeliberatebackend-docstringEnv Setup
776backend/app/services/oasis_profile_generator.py216use_llm: 是否使用LLM生成详细人设deliberatebackend-docstringEnv Setup
777backend/app/services/oasis_profile_generator.py223# 基础信息deliberatebackend-commentEnv Setup
778backend/app/services/oasis_profile_generator.py227# 构建上下文信息deliberatebackend-commentEnv Setup
779backend/app/services/oasis_profile_generator.py231# 使用LLM生成详细人设deliberatebackend-commentEnv Setup
780backend/app/services/oasis_profile_generator.py240# 使用规则生成基础人设deliberatebackend-commentEnv Setup
781backend/app/services/oasis_profile_generator.py269"""生成用户名"""deliberatebackend-docstringEnv Setup
782backend/app/services/oasis_profile_generator.py270# 移除特殊字符,转换为小写deliberatebackend-commentEnv Setup
783backend/app/services/oasis_profile_generator.py274# 添加随机后缀避免重复deliberatebackend-commentEnv Setup
784backend/app/services/oasis_profile_generator.py280使用Zep图谱混合搜索功能获取实体相关的丰富信息deliberatebackend-docstringEnv Setup
785backend/app/services/oasis_profile_generator.py282Zep没有内置混合搜索接口需要分别搜索edges和nodes然后合并结果。deliberatebackend-docstringEnv Setup
786backend/app/services/oasis_profile_generator.py283使用并行请求同时搜索,提高效率。deliberatebackend-docstringEnv Setup
787backend/app/services/oasis_profile_generator.py286entity: 实体节点对象deliberatebackend-docstringEnv Setup
788backend/app/services/oasis_profile_generator.py289包含facts, node_summaries, context的字典deliberatebackend-docstringEnv Setup
789backend/app/services/oasis_profile_generator.py304# 必须有graph_id才能进行搜索deliberatebackend-commentEnv Setup
790backend/app/services/oasis_profile_generator.py312"""搜索边(事实/关系)- 带重试机制"""deliberatebackend-docstringEnv Setup
791backend/app/services/oasis_profile_generator.py336"""搜索节点(实体摘要)- 带重试机制"""deliberatebackend-docstringEnv Setup
792backend/app/services/oasis_profile_generator.py360# 并行执行edges和nodes搜索deliberatebackend-commentEnv Setup
793backend/app/services/oasis_profile_generator.py365# 获取结果deliberatebackend-commentEnv Setup
794backend/app/services/oasis_profile_generator.py369# 处理边搜索结果deliberatebackend-commentEnv Setup
795backend/app/services/oasis_profile_generator.py377# 处理节点搜索结果deliberatebackend-commentEnv Setup
796backend/app/services/oasis_profile_generator.py384all_summaries.add(f"相关实体: {node.name}")gapbackend-prompt-labelEnv Setup
797backend/app/services/oasis_profile_generator.py387# 构建综合上下文deliberatebackend-commentEnv Setup
798backend/app/services/oasis_profile_generator.py390context_parts.append("事实信息:\n" + "\n".join(f"- {f}" for f in results["facts"][:20]))gapbackend-prompt-labelEnv Setup
799backend/app/services/oasis_profile_generator.py392context_parts.append("相关实体:\n" + "\n".join(f"- {s}" for s in results["node_summaries"][:10]))gapbackend-prompt-labelEnv Setup
800backend/app/services/oasis_profile_generator.py406构建实体的完整上下文信息deliberatebackend-docstringEnv Setup
801backend/app/services/oasis_profile_generator.py408包括:deliberatebackend-docstringEnv Setup
802backend/app/services/oasis_profile_generator.py4091. 实体本身的边信息(事实)deliberatebackend-docstringEnv Setup
803backend/app/services/oasis_profile_generator.py4102. 关联节点的详细信息deliberatebackend-docstringEnv Setup
804backend/app/services/oasis_profile_generator.py4113. Zep混合检索到的丰富信息deliberatebackend-docstringEnv Setup
805backend/app/services/oasis_profile_generator.py415# 1. 添加实体属性信息deliberatebackend-commentEnv Setup
806backend/app/services/oasis_profile_generator.py422context_parts.append("### 实体属性\n" + "\n".join(attrs))gapbackend-prompt-labelEnv Setup
807backend/app/services/oasis_profile_generator.py424# 2. 添加相关边信息(事实/关系)deliberatebackend-commentEnv Setup
808backend/app/services/oasis_profile_generator.py428for edge in entity.related_edges: # 不限制数量deliberatebackend-docstringEnv Setup
809backend/app/services/oasis_profile_generator.py438relationships.append(f"- {entity.name} --[{edge_name}]--> (相关实体)")gapbackend-prompt-labelEnv Setup
810backend/app/services/oasis_profile_generator.py440relationships.append(f"- (相关实体) --[{edge_name}]--> {entity.name}")gapbackend-prompt-labelEnv Setup
811backend/app/services/oasis_profile_generator.py443context_parts.append("### 相关事实和关系\n" + "\n".join(relationships))gapbackend-prompt-labelEnv Setup
812backend/app/services/oasis_profile_generator.py445# 3. 添加关联节点的详细信息deliberatebackend-commentEnv Setup
813backend/app/services/oasis_profile_generator.py448for node in entity.related_nodes: # 不限制数量deliberatebackend-docstringEnv Setup
814backend/app/services/oasis_profile_generator.py453# 过滤掉默认标签deliberatebackend-commentEnv Setup
815backend/app/services/oasis_profile_generator.py463context_parts.append("### 关联实体信息\n" + "\n".join(related_info))gapbackend-prompt-labelEnv Setup
816backend/app/services/oasis_profile_generator.py465# 4. 使用Zep混合检索获取更丰富的信息deliberatebackend-commentEnv Setup
817backend/app/services/oasis_profile_generator.py469# 去重:排除已存在的事实deliberatebackend-commentEnv Setup
818backend/app/services/oasis_profile_generator.py472context_parts.append("### Zep检索到的事实信息\n" + "\n".join(f"- {f}" for f in new_facts[:15]))gapbackend-prompt-labelEnv Setup
819backend/app/services/oasis_profile_generator.py475context_parts.append("### Zep检索到的相关节点\n" + "\n".join(f"- {s}" for s in zep_results["node_summaries"][:10]))gapbackend-prompt-labelEnv Setup
820backend/app/services/oasis_profile_generator.py480"""判断是否是个人类型实体"""deliberatebackend-docstringEnv Setup
821backend/app/services/oasis_profile_generator.py484"""判断是否是群体/机构类型实体"""deliberatebackend-docstringEnv Setup
822backend/app/services/oasis_profile_generator.py496使用LLM生成非常详细的人设deliberatebackend-docstringEnv Setup
823backend/app/services/oasis_profile_generator.py498根据实体类型区分:deliberatebackend-docstringEnv Setup
824backend/app/services/oasis_profile_generator.py499- 个人实体:生成具体的人物设定deliberatebackend-docstringEnv Setup
825backend/app/services/oasis_profile_generator.py500- 群体/机构实体:生成代表性账号设定deliberatebackend-docstringEnv Setup
826backend/app/services/oasis_profile_generator.py514# 尝试多次生成,直到成功或达到最大重试次数deliberatebackend-commentEnv Setup
827backend/app/services/oasis_profile_generator.py527temperature=0.7 - (attempt * 0.1) # 每次重试降低温度deliberatebackend-docstringEnv Setup
828backend/app/services/oasis_profile_generator.py528# 不设置max_tokens让LLM自由发挥deliberatebackend-commentEnv Setup
829backend/app/services/oasis_profile_generator.py533# 检查是否被截断finish_reason不是'stop'deliberatebackend-commentEnv Setup
830backend/app/services/oasis_profile_generator.py539# 尝试解析JSONdeliberatebackend-commentEnv Setup
831backend/app/services/oasis_profile_generator.py543# 验证必需字段deliberatebackend-commentEnv Setup
832backend/app/services/oasis_profile_generator.py547result["persona"] = entity_summary or f"{entity_name}是一个{entity_type}。"gapbackend-prompt-labelEnv Setup
833backend/app/services/oasis_profile_generator.py554# 尝试修复JSONdeliberatebackend-commentEnv Setup
834backend/app/services/oasis_profile_generator.py566time.sleep(1 * (attempt + 1)) # 指数退避deliberatebackend-docstringEnv Setup
835backend/app/services/oasis_profile_generator.py574"""修复被截断的JSON输出被max_tokens限制截断"""deliberatebackend-docstringEnv Setup
836backend/app/services/oasis_profile_generator.py577# 如果JSON被截断尝试闭合它deliberatebackend-commentEnv Setup
837backend/app/services/oasis_profile_generator.py580# 计算未闭合的括号deliberatebackend-commentEnv Setup
838backend/app/services/oasis_profile_generator.py584# 检查是否有未闭合的字符串deliberatebackend-commentEnv Setup
839backend/app/services/oasis_profile_generator.py585# 简单检查:如果最后一个引号后没有逗号或闭合括号,可能是字符串被截断deliberatebackend-commentEnv Setup
840backend/app/services/oasis_profile_generator.py587# 尝试闭合字符串deliberatebackend-commentEnv Setup
841backend/app/services/oasis_profile_generator.py590# 闭合括号deliberatebackend-commentEnv Setup
842backend/app/services/oasis_profile_generator.py597"""尝试修复损坏的JSON"""deliberatebackend-docstringEnv Setup
843backend/app/services/oasis_profile_generator.py600# 1. 首先尝试修复被截断的情况deliberatebackend-commentEnv Setup
844backend/app/services/oasis_profile_generator.py603# 2. 尝试提取JSON部分deliberatebackend-commentEnv Setup
845backend/app/services/oasis_profile_generator.py608# 3. 处理字符串中的换行符问题deliberatebackend-commentEnv Setup
846backend/app/services/oasis_profile_generator.py609# 找到所有字符串值并替换其中的换行符deliberatebackend-commentEnv Setup
847backend/app/services/oasis_profile_generator.py612# 替换字符串内的实际换行符为空格deliberatebackend-commentEnv Setup
848backend/app/services/oasis_profile_generator.py614# 替换多余空格deliberatebackend-commentEnv Setup
849backend/app/services/oasis_profile_generator.py618# 匹配JSON字符串值deliberatebackend-commentEnv Setup
850backend/app/services/oasis_profile_generator.py621# 4. 尝试解析deliberatebackend-commentEnv Setup
851backend/app/services/oasis_profile_generator.py627# 5. 如果还是失败,尝试更激进的修复deliberatebackend-commentEnv Setup
852backend/app/services/oasis_profile_generator.py629# 移除所有控制字符deliberatebackend-commentEnv Setup
853backend/app/services/oasis_profile_generator.py631# 替换所有连续空白deliberatebackend-commentEnv Setup
854backend/app/services/oasis_profile_generator.py639# 6. 尝试从内容中提取部分信息deliberatebackend-commentEnv Setup
855backend/app/services/oasis_profile_generator.py641persona_match = re.search(r'"persona"\s*:\s*"([^"]*)', content) # 可能被截断gapbackend-prompt-labelEnv Setup
856backend/app/services/oasis_profile_generator.py644persona = persona_match.group(1) if persona_match else (entity_summary or f"{entity_name}是一个{entity_type}。")gapbackend-prompt-labelEnv Setup
857backend/app/services/oasis_profile_generator.py646# 如果提取到了有意义的内容,标记为已修复deliberatebackend-commentEnv Setup
858backend/app/services/oasis_profile_generator.py655# 7. 完全失败,返回基础结构deliberatebackend-commentEnv Setup
859backend/app/services/oasis_profile_generator.py659"persona": entity_summary or f"{entity_name}是一个{entity_type}。"gapbackend-prompt-labelEnv Setup
860backend/app/services/oasis_profile_generator.py663"""获取系统提示词"""deliberatebackend-docstringEnv Setup
861backend/app/services/oasis_profile_generator.py664base_prompt = "你是社交媒体用户画像生成专家。生成详细、真实的人设用于舆论模拟,最大程度还原已有现实情况。必须返回有效的JSON格式所有字符串值不能包含未转义的换行符。"gapbackend-prompt-labelEnv Setup
862backend/app/services/oasis_profile_generator.py675"""构建个人实体的详细人设提示词"""deliberatebackend-docstringEnv Setup
863backend/app/services/oasis_profile_generator.py677attrs_str = json.dumps(entity_attributes, ensure_ascii=False) if entity_attributes else "无"gapbackend-prompt-labelEnv Setup
864backend/app/services/oasis_profile_generator.py678context_str = context[:3000] if context else "无额外上下文"gapbackend-prompt-labelEnv Setup
865backend/app/services/oasis_profile_generator.py680return f"""为实体生成详细的社交媒体用户人设,最大程度还原已有现实情况。gapbackend-prompt-labelEnv Setup
866backend/app/services/oasis_profile_generator.py682实体名称: {entity_name}deliberatebackend-docstringEnv Setup
867backend/app/services/oasis_profile_generator.py683实体类型: {entity_type}deliberatebackend-docstringEnv Setup
868backend/app/services/oasis_profile_generator.py684实体摘要: {entity_summary}deliberatebackend-docstringEnv Setup
869backend/app/services/oasis_profile_generator.py685实体属性: {attrs_str}deliberatebackend-docstringEnv Setup
870backend/app/services/oasis_profile_generator.py687上下文信息:deliberatebackend-docstringEnv Setup
871backend/app/services/oasis_profile_generator.py690请生成JSON包含以下字段:deliberatebackend-docstringEnv Setup
872backend/app/services/oasis_profile_generator.py6921. bio: 社交媒体简介200字deliberatebackend-docstringEnv Setup
873backend/app/services/oasis_profile_generator.py6932. persona: 详细人设描述2000字的纯文本需包含:deliberatebackend-docstringEnv Setup
874backend/app/services/oasis_profile_generator.py694- 基本信息(年龄、职业、教育背景、所在地)deliberatebackend-docstringEnv Setup
875backend/app/services/oasis_profile_generator.py695- 人物背景(重要经历、与事件的关联、社会关系)deliberatebackend-docstringEnv Setup
876backend/app/services/oasis_profile_generator.py696- 性格特征MBTI类型、核心性格、情绪表达方式deliberatebackend-docstringEnv Setup
877backend/app/services/oasis_profile_generator.py697- 社交媒体行为(发帖频率、内容偏好、互动风格、语言特点)deliberatebackend-docstringEnv Setup
878backend/app/services/oasis_profile_generator.py698- 立场观点(对话题的态度、可能被激怒/感动的内容)deliberatebackend-docstringEnv Setup
879backend/app/services/oasis_profile_generator.py699- 独特特征(口头禅、特殊经历、个人爱好)deliberatebackend-docstringEnv Setup
880backend/app/services/oasis_profile_generator.py700- 个人记忆(人设的重要部分,要介绍这个个体与事件的关联,以及这个个体在事件中的已有动作与反应)deliberatebackend-docstringEnv Setup
881backend/app/services/oasis_profile_generator.py7013. age: 年龄数字(必须是整数)deliberatebackend-docstringEnv Setup
882backend/app/services/oasis_profile_generator.py7024. gender: 性别,必须是英文: "male" 或 "female"gapbackend-prompt-labelEnv Setup
883backend/app/services/oasis_profile_generator.py7035. mbti: MBTI类型如INTJ、ENFP等deliberatebackend-docstringEnv Setup
884backend/app/services/oasis_profile_generator.py7046. country: 国家(使用中文,如"中国"gapbackend-prompt-labelEnv Setup
885backend/app/services/oasis_profile_generator.py7057. profession: 职业deliberatebackend-docstringEnv Setup
886backend/app/services/oasis_profile_generator.py7068. interested_topics: 感兴趣话题数组deliberatebackend-docstringEnv Setup
887backend/app/services/oasis_profile_generator.py708重要:deliberatebackend-docstringEnv Setup
888backend/app/services/oasis_profile_generator.py709- 所有字段值必须是字符串或数字,不要使用换行符deliberatebackend-docstringEnv Setup
889backend/app/services/oasis_profile_generator.py710- persona必须是一段连贯的文字描述deliberatebackend-docstringEnv Setup
890backend/app/services/oasis_profile_generator.py711- {get_language_instruction()} (gender字段必须用英文male/female)deliberatebackend-docstringEnv Setup
891backend/app/services/oasis_profile_generator.py712- 内容要与实体信息保持一致deliberatebackend-docstringEnv Setup
892backend/app/services/oasis_profile_generator.py713- age必须是有效的整数gender必须是"male"或"female"gapbackend-prompt-labelEnv Setup
893backend/app/services/oasis_profile_generator.py724"""构建群体/机构实体的详细人设提示词"""deliberatebackend-docstringEnv Setup
894backend/app/services/oasis_profile_generator.py726attrs_str = json.dumps(entity_attributes, ensure_ascii=False) if entity_attributes else "无"gapbackend-prompt-labelEnv Setup
895backend/app/services/oasis_profile_generator.py727context_str = context[:3000] if context else "无额外上下文"gapbackend-prompt-labelEnv Setup
896backend/app/services/oasis_profile_generator.py729return f"""为机构/群体实体生成详细的社交媒体账号设定,最大程度还原已有现实情况。gapbackend-prompt-labelEnv Setup
897backend/app/services/oasis_profile_generator.py731实体名称: {entity_name}deliberatebackend-docstringEnv Setup
898backend/app/services/oasis_profile_generator.py732实体类型: {entity_type}deliberatebackend-docstringEnv Setup
899backend/app/services/oasis_profile_generator.py733实体摘要: {entity_summary}deliberatebackend-docstringEnv Setup
900backend/app/services/oasis_profile_generator.py734实体属性: {attrs_str}deliberatebackend-docstringEnv Setup
901backend/app/services/oasis_profile_generator.py736上下文信息:deliberatebackend-docstringEnv Setup
902backend/app/services/oasis_profile_generator.py739请生成JSON包含以下字段:deliberatebackend-docstringEnv Setup
903backend/app/services/oasis_profile_generator.py7411. bio: 官方账号简介200字专业得体deliberatebackend-docstringEnv Setup
904backend/app/services/oasis_profile_generator.py7422. persona: 详细账号设定描述2000字的纯文本需包含:deliberatebackend-docstringEnv Setup
905backend/app/services/oasis_profile_generator.py743- 机构基本信息(正式名称、机构性质、成立背景、主要职能)deliberatebackend-docstringEnv Setup
906backend/app/services/oasis_profile_generator.py744- 账号定位(账号类型、目标受众、核心功能)deliberatebackend-docstringEnv Setup
907backend/app/services/oasis_profile_generator.py745- 发言风格(语言特点、常用表达、禁忌话题)deliberatebackend-docstringEnv Setup
908backend/app/services/oasis_profile_generator.py746- 发布内容特点(内容类型、发布频率、活跃时间段)deliberatebackend-docstringEnv Setup
909backend/app/services/oasis_profile_generator.py747- 立场态度(对核心话题的官方立场、面对争议的处理方式)deliberatebackend-docstringEnv Setup
910backend/app/services/oasis_profile_generator.py748- 特殊说明(代表的群体画像、运营习惯)deliberatebackend-docstringEnv Setup
911backend/app/services/oasis_profile_generator.py749- 机构记忆(机构人设的重要部分,要介绍这个机构与事件的关联,以及这个机构在事件中的已有动作与反应)deliberatebackend-docstringEnv Setup
912backend/app/services/oasis_profile_generator.py7503. age: 固定填30机构账号的虚拟年龄deliberatebackend-docstringEnv Setup
913backend/app/services/oasis_profile_generator.py7514. gender: 固定填"other"机构账号使用other表示非个人gapbackend-prompt-labelEnv Setup
914backend/app/services/oasis_profile_generator.py7525. mbti: MBTI类型用于描述账号风格如ISTJ代表严谨保守deliberatebackend-docstringEnv Setup
915backend/app/services/oasis_profile_generator.py7536. country: 国家(使用中文,如"中国"gapbackend-prompt-labelEnv Setup
916backend/app/services/oasis_profile_generator.py7547. profession: 机构职能描述deliberatebackend-docstringEnv Setup
917backend/app/services/oasis_profile_generator.py7558. interested_topics: 关注领域数组deliberatebackend-docstringEnv Setup
918backend/app/services/oasis_profile_generator.py757重要:deliberatebackend-docstringEnv Setup
919backend/app/services/oasis_profile_generator.py758- 所有字段值必须是字符串或数字不允许null值deliberatebackend-docstringEnv Setup
920backend/app/services/oasis_profile_generator.py759- persona必须是一段连贯的文字描述不要使用换行符deliberatebackend-docstringEnv Setup
921backend/app/services/oasis_profile_generator.py760- {get_language_instruction()} (gender字段必须用英文"other")gapbackend-prompt-labelEnv Setup
922backend/app/services/oasis_profile_generator.py761- age必须是整数30gender必须是字符串"other"gapbackend-prompt-labelEnv Setup
923backend/app/services/oasis_profile_generator.py762- 机构账号发言要符合其身份定位"""gapbackend-prompt-labelEnv Setup
924backend/app/services/oasis_profile_generator.py771"""使用规则生成基础人设"""deliberatebackend-docstringEnv Setup
925backend/app/services/oasis_profile_generator.py773# 根据实体类型生成不同的人设deliberatebackend-commentEnv Setup
926backend/app/services/oasis_profile_generator.py804"age": 30, # 机构虚拟年龄gapbackend-prompt-labelEnv Setup
927backend/app/services/oasis_profile_generator.py805"gender": "other", # 机构使用othergapbackend-prompt-labelEnv Setup
928backend/app/services/oasis_profile_generator.py806"mbti": "ISTJ", # 机构风格:严谨保守gapbackend-prompt-labelEnv Setup
929backend/app/services/oasis_profile_generator.py807"country": "中国",gapbackend-prompt-labelEnv Setup
930backend/app/services/oasis_profile_generator.py816"age": 30, # 机构虚拟年龄gapbackend-prompt-labelEnv Setup
931backend/app/services/oasis_profile_generator.py817"gender": "other", # 机构使用othergapbackend-prompt-labelEnv Setup
932backend/app/services/oasis_profile_generator.py818"mbti": "ISTJ", # 机构风格:严谨保守gapbackend-prompt-labelEnv Setup
933backend/app/services/oasis_profile_generator.py819"country": "中国",gapbackend-prompt-labelEnv Setup
934backend/app/services/oasis_profile_generator.py825# 默认人设deliberatebackend-commentEnv Setup
935backend/app/services/oasis_profile_generator.py838"""设置图谱ID用于Zep检索"""deliberatebackend-docstringEnv Setup
936backend/app/services/oasis_profile_generator.py852批量从实体生成Agent Profile支持并行生成deliberatebackend-docstringEnv Setup
937backend/app/services/oasis_profile_generator.py855entities: 实体列表deliberatebackend-docstringEnv Setup
938backend/app/services/oasis_profile_generator.py856use_llm: 是否使用LLM生成详细人设deliberatebackend-docstringEnv Setup
939backend/app/services/oasis_profile_generator.py857progress_callback: 进度回调函数 (current, total, message)deliberatebackend-docstringEnv Setup
940backend/app/services/oasis_profile_generator.py858graph_id: 图谱ID用于Zep检索获取更丰富上下文deliberatebackend-docstringEnv Setup
941backend/app/services/oasis_profile_generator.py859parallel_count: 并行生成数量默认5deliberatebackend-docstringEnv Setup
942backend/app/services/oasis_profile_generator.py860realtime_output_path: 实时写入的文件路径(如果提供,每生成一个就写入一次)deliberatebackend-docstringEnv Setup
943backend/app/services/oasis_profile_generator.py861output_platform: 输出平台格式 ("reddit" 或 "twitter")gapbackend-prompt-labelEnv Setup
944backend/app/services/oasis_profile_generator.py864Agent Profile列表deliberatebackend-docstringEnv Setup
945backend/app/services/oasis_profile_generator.py869# 设置graph_id用于Zep检索deliberatebackend-commentEnv Setup
946backend/app/services/oasis_profile_generator.py874profiles = [None] * total # 预分配列表保持顺序deliberatebackend-docstringEnv Setup
947backend/app/services/oasis_profile_generator.py875completed_count = [0] # 使用列表以便在闭包中修改deliberatebackend-docstringEnv Setup
948backend/app/services/oasis_profile_generator.py878# 实时写入文件的辅助函数deliberatebackend-commentEnv Setup
949backend/app/services/oasis_profile_generator.py880"""实时保存已生成的 profiles 到文件"""deliberatebackend-docstringEnv Setup
950backend/app/services/oasis_profile_generator.py885# 过滤出已生成的 profilesdeliberatebackend-commentEnv Setup
951backend/app/services/oasis_profile_generator.py892# Reddit JSON 格式deliberatebackend-commentEnv Setup
952backend/app/services/oasis_profile_generator.py897# Twitter CSV 格式deliberatebackend-commentEnv Setup
953backend/app/services/oasis_profile_generator.py913"""生成单个profile的工作函数"""deliberatebackend-docstringEnv Setup
954backend/app/services/oasis_profile_generator.py924# 实时输出生成的人设到控制台和日志deliberatebackend-commentEnv Setup
955backend/app/services/oasis_profile_generator.py931# 创建一个基础profiledeliberatebackend-commentEnv Setup
956backend/app/services/oasis_profile_generator.py945print(f"开始生成Agent人设 - 共 {total} 个实体,并行数: {parallel_count}")gapbackend-logLogs
957backend/app/services/oasis_profile_generator.py948# 使用线程池并行执行deliberatebackend-commentEnv Setup
958backend/app/services/oasis_profile_generator.py950# 提交所有任务deliberatebackend-commentEnv Setup
959backend/app/services/oasis_profile_generator.py956# 收集结果deliberatebackend-commentEnv Setup
960backend/app/services/oasis_profile_generator.py969# 实时写入文件deliberatebackend-commentEnv Setup
961backend/app/services/oasis_profile_generator.py976f"已完成 {current}/{total}: {entity.name}{entity_type}"gapbackend-prompt-labelEnv Setup
962backend/app/services/oasis_profile_generator.py997# 实时写入文件(即使是备用人设)deliberatebackend-commentEnv Setup
963backend/app/services/oasis_profile_generator.py1001print(f"人设生成完成!共生成 {len([p for p in profiles if p])} 个Agent")gapbackend-logLogs
964backend/app/services/oasis_profile_generator.py1007"""实时输出生成的人设到控制台(完整内容,不截断)"""deliberatebackend-docstringEnv Setup
965backend/app/services/oasis_profile_generator.py1010# 构建完整输出内容(不截断)deliberatebackend-commentEnv Setup
966backend/app/services/oasis_profile_generator.py1011topics_str = ', '.join(profile.interested_topics) if profile.interested_topics else '无'gapbackend-prompt-labelEnv Setup
967backend/app/services/oasis_profile_generator.py1017f"用户名: {profile.user_name}",gapbackend-prompt-labelEnv Setup
968backend/app/services/oasis_profile_generator.py1019f"【简介】",gapbackend-prompt-labelEnv Setup
969backend/app/services/oasis_profile_generator.py1022f"【详细人设】",gapbackend-prompt-labelEnv Setup
970backend/app/services/oasis_profile_generator.py1025f"【基本属性】",gapbackend-prompt-labelEnv Setup
971backend/app/services/oasis_profile_generator.py1026f"年龄: {profile.age} | 性别: {profile.gender} | MBTI: {profile.mbti}",gapbackend-prompt-labelEnv Setup
972backend/app/services/oasis_profile_generator.py1027f"职业: {profile.profession} | 国家: {profile.country}",gapbackend-prompt-labelEnv Setup
973backend/app/services/oasis_profile_generator.py1028f"兴趣话题: {topics_str}",gapbackend-prompt-labelEnv Setup
974backend/app/services/oasis_profile_generator.py1034# 只输出到控制台避免重复logger不再输出完整内容deliberatebackend-commentEnv Setup
975backend/app/services/oasis_profile_generator.py1044保存Profile到文件根据平台选择正确格式deliberatebackend-docstringEnv Setup
976backend/app/services/oasis_profile_generator.py1046OASIS平台格式要求deliberatebackend-docstringEnv Setup
977backend/app/services/oasis_profile_generator.py1047- Twitter: CSV格式deliberatebackend-docstringEnv Setup
978backend/app/services/oasis_profile_generator.py1048- Reddit: JSON格式deliberatebackend-docstringEnv Setup
979backend/app/services/oasis_profile_generator.py1051profiles: Profile列表deliberatebackend-docstringEnv Setup
980backend/app/services/oasis_profile_generator.py1052file_path: 文件路径deliberatebackend-docstringEnv Setup
981backend/app/services/oasis_profile_generator.py1053platform: 平台类型 ("reddit" 或 "twitter")gapbackend-prompt-labelEnv Setup
982backend/app/services/oasis_profile_generator.py1062保存Twitter Profile为CSV格式符合OASIS官方要求deliberatebackend-docstringEnv Setup
983backend/app/services/oasis_profile_generator.py1064OASIS Twitter要求的CSV字段deliberatebackend-docstringEnv Setup
984backend/app/services/oasis_profile_generator.py1065- user_id: 用户ID根据CSV顺序从0开始deliberatebackend-docstringEnv Setup
985backend/app/services/oasis_profile_generator.py1066- name: 用户真实姓名deliberatebackend-docstringEnv Setup
986backend/app/services/oasis_profile_generator.py1067- username: 系统中的用户名deliberatebackend-docstringEnv Setup
987backend/app/services/oasis_profile_generator.py1068- user_char: 详细人设描述注入到LLM系统提示中指导Agent行为deliberatebackend-docstringEnv Setup
988backend/app/services/oasis_profile_generator.py1069- description: 简短的公开简介(显示在用户资料页面)deliberatebackend-docstringEnv Setup
989backend/app/services/oasis_profile_generator.py1071user_char vs description 区别:deliberatebackend-docstringEnv Setup
990backend/app/services/oasis_profile_generator.py1072- user_char: 内部使用LLM系统提示决定Agent如何思考和行动deliberatebackend-docstringEnv Setup
991backend/app/services/oasis_profile_generator.py1073- description: 外部显示,其他用户可见的简介deliberatebackend-docstringEnv Setup
992backend/app/services/oasis_profile_generator.py1077# 确保文件扩展名是.csvdeliberatebackend-commentEnv Setup
993backend/app/services/oasis_profile_generator.py1084# 写入OASIS要求的表头deliberatebackend-commentEnv Setup
994backend/app/services/oasis_profile_generator.py1088# 写入数据行deliberatebackend-commentEnv Setup
995backend/app/services/oasis_profile_generator.py1090# user_char: 完整人设bio + persona用于LLM系统提示deliberatebackend-commentEnv Setup
996backend/app/services/oasis_profile_generator.py1094# 处理换行符CSV中用空格替代deliberatebackend-commentEnv Setup
997backend/app/services/oasis_profile_generator.py1097# description: 简短简介,用于外部显示deliberatebackend-commentEnv Setup
998backend/app/services/oasis_profile_generator.py1101idx, # user_id: 从0开始的顺序IDdeliberatebackend-docstringEnv Setup
999backend/app/services/oasis_profile_generator.py1102profile.name, # name: 真实姓名deliberatebackend-docstringEnv Setup
1000backend/app/services/oasis_profile_generator.py1103profile.user_name, # username: 用户名deliberatebackend-docstringEnv Setup
1001backend/app/services/oasis_profile_generator.py1104user_char, # user_char: 完整人设内部LLM使用deliberatebackend-docstringEnv Setup
1002backend/app/services/oasis_profile_generator.py1105description # description: 简短简介(外部显示)deliberatebackend-docstringEnv Setup
1003backend/app/services/oasis_profile_generator.py1113标准化gender字段为OASIS要求的英文格式deliberatebackend-docstringEnv Setup
1004backend/app/services/oasis_profile_generator.py1115OASIS要求: male, female, otherdeliberatebackend-docstringEnv Setup
1005backend/app/services/oasis_profile_generator.py1122# 中文映射deliberatebackend-commentEnv Setup
1006backend/app/services/oasis_profile_generator.py1124"男": "male",gapbackend-prompt-labelEnv Setup
1007backend/app/services/oasis_profile_generator.py1125"女": "female",gapbackend-prompt-labelEnv Setup
1008backend/app/services/oasis_profile_generator.py1126"机构": "other",gapbackend-prompt-labelEnv Setup
1009backend/app/services/oasis_profile_generator.py1127"其他": "other",gapbackend-prompt-labelEnv Setup
1010backend/app/services/oasis_profile_generator.py1128# 英文已有deliberatebackend-commentEnv Setup
1011backend/app/services/oasis_profile_generator.py1138保存Reddit Profile为JSON格式deliberatebackend-docstringEnv Setup
1012backend/app/services/oasis_profile_generator.py1140使用与 to_reddit_format() 一致的格式,确保 OASIS 能正确读取。deliberatebackend-docstringEnv Setup
1013backend/app/services/oasis_profile_generator.py1141必须包含 user_id 字段,这是 OASIS agent_graph.get_agent() 匹配的关键!deliberatebackend-docstringEnv Setup
1014backend/app/services/oasis_profile_generator.py1143必需字段:deliberatebackend-docstringEnv Setup
1015backend/app/services/oasis_profile_generator.py1144- user_id: 用户ID整数用于匹配 initial_posts 中的 poster_agent_iddeliberatebackend-docstringEnv Setup
1016backend/app/services/oasis_profile_generator.py1145- username: 用户名deliberatebackend-docstringEnv Setup
1017backend/app/services/oasis_profile_generator.py1146- name: 显示名称deliberatebackend-docstringEnv Setup
1018backend/app/services/oasis_profile_generator.py1147- bio: 简介deliberatebackend-docstringEnv Setup
1019backend/app/services/oasis_profile_generator.py1148- persona: 详细人设deliberatebackend-docstringEnv Setup
1020backend/app/services/oasis_profile_generator.py1149- age: 年龄(整数)deliberatebackend-docstringEnv Setup
1021backend/app/services/oasis_profile_generator.py1150- gender: "male", "female", 或 "other"gapbackend-prompt-labelEnv Setup
1022backend/app/services/oasis_profile_generator.py1151- mbti: MBTI类型deliberatebackend-docstringEnv Setup
1023backend/app/services/oasis_profile_generator.py1152- country: 国家deliberatebackend-docstringEnv Setup
1024backend/app/services/oasis_profile_generator.py1156# 使用与 to_reddit_format() 一致的格式deliberatebackend-commentEnv Setup
1025backend/app/services/oasis_profile_generator.py1158"user_id": profile.user_id if profile.user_id is not None else idx, # 关键:必须包含 user_idgapbackend-prompt-labelEnv Setup
1026backend/app/services/oasis_profile_generator.py1165# OASIS必需字段 - 确保都有默认值deliberatebackend-commentEnv Setup
1027backend/app/services/oasis_profile_generator.py1169"country": profile.country if profile.country else "中国",gapbackend-prompt-labelEnv Setup
1028backend/app/services/oasis_profile_generator.py1172# 可选字段deliberatebackend-commentEnv Setup
1029backend/app/services/oasis_profile_generator.py1185# 保留旧方法名作为别名,保持向后兼容deliberatebackend-commentEnv Setup
1030backend/app/services/oasis_profile_generator.py1192"""[已废弃] 请使用 save_profiles() 方法"""deliberatebackend-docstringEnv Setup
1031backend/app/services/ontology_generator.py2本体生成服务deliberatebackend-docstringGraph Build
1032backend/app/services/ontology_generator.py3接口1分析文本内容生成适合社会模拟的实体和关系类型定义deliberatebackend-docstringGraph Build
1033backend/app/services/ontology_generator.py17"""将任意格式的名称转换为 PascalCase如 'works_for' -> 'WorksFor', 'person' -> 'Person'"""deliberatebackend-docstringGraph Build
1034backend/app/services/ontology_generator.py18# 按非字母数字字符分割deliberatebackend-commentGraph Build
1035backend/app/services/ontology_generator.py20# 再按 camelCase 边界分割(如 'camelCase' -> ['camel', 'Case']deliberatebackend-commentGraph Build
1036backend/app/services/ontology_generator.py24# 每个词首字母大写,过滤空串deliberatebackend-commentGraph Build
1037backend/app/services/ontology_generator.py29# 本体生成的系统提示词deliberatebackend-commentGraph Build
1038backend/app/services/ontology_generator.py178本体生成器deliberatebackend-docstringGraph Build
1039backend/app/services/ontology_generator.py179分析文本内容,生成实体和关系类型定义deliberatebackend-docstringGraph Build
1040backend/app/services/ontology_generator.py192生成本体定义deliberatebackend-docstringGraph Build
1041backend/app/services/ontology_generator.py195document_texts: 文档文本列表deliberatebackend-docstringGraph Build
1042backend/app/services/ontology_generator.py196simulation_requirement: 模拟需求描述deliberatebackend-docstringGraph Build
1043backend/app/services/ontology_generator.py197additional_context: 额外上下文deliberatebackend-docstringGraph Build
1044backend/app/services/ontology_generator.py200本体定义entity_types, edge_types等deliberatebackend-docstringGraph Build
1045backend/app/services/ontology_generator.py202# 构建用户消息deliberatebackend-commentGraph Build
1046backend/app/services/ontology_generator.py216# 调用LLMdeliberatebackend-commentGraph Build
1047backend/app/services/ontology_generator.py223# 验证和后处理deliberatebackend-commentGraph Build
1048backend/app/services/ontology_generator.py228# 传给 LLM 的文本最大长度5万字deliberatebackend-commentGraph Build
1049backend/app/services/ontology_generator.py237"""构建用户消息"""deliberatebackend-docstringGraph Build
1050backend/app/services/ontology_generator.py239# 合并文本deliberatebackend-commentGraph Build
1051backend/app/services/ontology_generator.py243# 如果文本超过5万字截断仅影响传给LLM的内容不影响图谱构建deliberatebackend-commentGraph Build
1052backend/app/services/ontology_generator.py278"""验证和后处理结果"""deliberatebackend-docstringGraph Build
1053backend/app/services/ontology_generator.py280# 确保必要字段存在deliberatebackend-commentGraph Build
1054backend/app/services/ontology_generator.py288# 验证实体类型deliberatebackend-commentGraph Build
1055backend/app/services/ontology_generator.py289# 记录原始名称到 PascalCase 的映射,用于后续修正 edge 的 source_targets 引用deliberatebackend-commentGraph Build
1056backend/app/services/ontology_generator.py292# 强制将 entity name 转为 PascalCaseZep API 要求)deliberatebackend-commentGraph Build
1057backend/app/services/ontology_generator.py303# 确保description不超过100字符deliberatebackend-commentGraph Build
1058backend/app/services/ontology_generator.py307# 验证关系类型deliberatebackend-commentGraph Build
1059backend/app/services/ontology_generator.py309# 强制将 edge name 转为 SCREAMING_SNAKE_CASEZep API 要求)deliberatebackend-commentGraph Build
1060backend/app/services/ontology_generator.py315# 修正 source_targets 中的实体名称引用,与转换后的 PascalCase 保持一致deliberatebackend-commentGraph Build
1061backend/app/services/ontology_generator.py328# Zep API 限制:最多 10 个自定义实体类型,最多 10 个自定义边类型deliberatebackend-commentGraph Build
1062backend/app/services/ontology_generator.py332# 去重:按 name 去重,保留首次出现的deliberatebackend-commentGraph Build
1063backend/app/services/ontology_generator.py344# 兜底类型定义deliberatebackend-commentGraph Build
1064backend/app/services/ontology_generator.py365# 检查是否已有兜底类型deliberatebackend-commentGraph Build
1065backend/app/services/ontology_generator.py370# 需要添加的兜底类型deliberatebackend-commentGraph Build
1066backend/app/services/ontology_generator.py381# 如果添加后会超过 10 个,需要移除一些现有类型deliberatebackend-commentGraph Build
1067backend/app/services/ontology_generator.py383# 计算需要移除多少个deliberatebackend-commentGraph Build
1068backend/app/services/ontology_generator.py385# 从末尾移除(保留前面更重要的具体类型)deliberatebackend-commentGraph Build
1069backend/app/services/ontology_generator.py388# 添加兜底类型deliberatebackend-commentGraph Build
1070backend/app/services/ontology_generator.py391# 最终确保不超过限制(防御性编程)deliberatebackend-commentGraph Build
1071backend/app/services/ontology_generator.py402将本体定义转换为Python代码类似ontology.pydeliberatebackend-docstringGraph Build
1072backend/app/services/ontology_generator.py405ontology: 本体定义deliberatebackend-docstringGraph Build
1073backend/app/services/ontology_generator.py408Python代码字符串deliberatebackend-docstringGraph Build
1074backend/app/services/ontology_generator.py412'自定义实体类型定义',gapbackend-prompt-labelGraph Build
1075backend/app/services/ontology_generator.py413'由MiroFish自动生成用于社会舆论模拟',gapbackend-prompt-labelGraph Build
1076backend/app/services/ontology_generator.py420'# ============== 实体类型定义 ==============',gapbackend-prompt-labelGraph Build
1077backend/app/services/ontology_generator.py424# 生成实体类型deliberatebackend-commentGraph Build
1078backend/app/services/ontology_generator.py447code_lines.append('# ============== 关系类型定义 ==============')gapbackend-prompt-labelGraph Build
1079backend/app/services/ontology_generator.py450# 生成关系类型deliberatebackend-commentGraph Build
1080backend/app/services/ontology_generator.py453# 转换为PascalCase类名deliberatebackend-commentGraph Build
1081backend/app/services/ontology_generator.py475# 生成类型字典deliberatebackend-commentGraph Build
1082backend/app/services/ontology_generator.py476code_lines.append('# ============== 类型配置 ==============')gapbackend-prompt-labelGraph Build
1083backend/app/services/ontology_generator.py492# 生成边的source_targets映射deliberatebackend-commentGraph Build
1084backend/app/services/report_agent.py2Report Agent服务deliberatebackend-docstringReport
1085backend/app/services/report_agent.py3使用LangChain + Zep实现ReACT模式的模拟报告生成deliberatebackend-docstringReport
1086backend/app/services/report_agent.py5功能:deliberatebackend-docstringReport
1087backend/app/services/report_agent.py61. 根据模拟需求和Zep图谱信息生成报告deliberatebackend-docstringReport
1088backend/app/services/report_agent.py72. 先规划目录结构,然后分段生成deliberatebackend-docstringReport
1089backend/app/services/report_agent.py83. 每段采用ReACT多轮思考与反思模式deliberatebackend-docstringReport
1090backend/app/services/report_agent.py94. 支持与用户对话,在对话中自主调用检索工具deliberatebackend-docstringReport
1091backend/app/services/report_agent.py38Report Agent 详细日志记录器deliberatebackend-docstringReport
1092backend/app/services/report_agent.py40在报告文件夹中生成 agent_log.jsonl 文件,记录每一步详细动作。deliberatebackend-docstringReport
1093backend/app/services/report_agent.py41每行是一个完整的 JSON 对象,包含时间戳、动作类型、详细内容等。deliberatebackend-docstringReport
1094backend/app/services/report_agent.py46初始化日志记录器deliberatebackend-docstringReport
1095backend/app/services/report_agent.py49report_id: 报告ID用于确定日志文件路径deliberatebackend-docstringReport
1096backend/app/services/report_agent.py59"""确保日志文件所在目录存在"""deliberatebackend-docstringReport
1097backend/app/services/report_agent.py64"""获取从开始到现在的耗时(秒)"""deliberatebackend-docstringReport
1098backend/app/services/report_agent.py76记录一条日志deliberatebackend-docstringReport
1099backend/app/services/report_agent.py79action: 动作类型,如 'start', 'tool_call', 'llm_response', 'section_complete' 等gapbackend-prompt-labelReport
1100backend/app/services/report_agent.py80stage: 当前阶段,如 'planning', 'generating', 'completed'gapbackend-prompt-labelReport
1101backend/app/services/report_agent.py81details: 详细内容字典,不截断deliberatebackend-docstringReport
1102backend/app/services/report_agent.py82section_title: 当前章节标题(可选)deliberatebackend-docstringReport
1103backend/app/services/report_agent.py83section_index: 当前章节索引(可选)deliberatebackend-docstringReport
1104backend/app/services/report_agent.py96# 追加写入 JSONL 文件deliberatebackend-commentReport
1105backend/app/services/report_agent.py101"""记录报告生成开始"""deliberatebackend-docstringReport
1106backend/app/services/report_agent.py114"""记录大纲规划开始"""deliberatebackend-docstringReport
1107backend/app/services/report_agent.py122"""记录规划时获取的上下文信息"""deliberatebackend-docstringReport
1108backend/app/services/report_agent.py133"""记录大纲规划完成"""deliberatebackend-docstringReport
1109backend/app/services/report_agent.py144"""记录章节生成开始"""deliberatebackend-docstringReport
1110backend/app/services/report_agent.py154"""记录 ReACT 思考过程"""deliberatebackend-docstringReport
1111backend/app/services/report_agent.py175"""记录工具调用"""deliberatebackend-docstringReport
1112backend/app/services/report_agent.py197"""记录工具调用结果(完整内容,不截断)"""deliberatebackend-docstringReport
1113backend/app/services/report_agent.py206"result": result, # 完整结果,不截断gapbackend-prompt-labelReport
1114backend/app/services/report_agent.py221"""记录 LLM 响应(完整内容,不截断)"""deliberatebackend-docstringReport
1115backend/app/services/report_agent.py229"response": response, # 完整响应,不截断gapbackend-prompt-labelReport
1116backend/app/services/report_agent.py244"""记录章节内容生成完成(仅记录内容,不代表整个章节完成)"""deliberatebackend-docstringReport
1117backend/app/services/report_agent.py251"content": content, # 完整内容,不截断gapbackend-prompt-labelReport
1118backend/app/services/report_agent.py265记录章节生成完成deliberatebackend-docstringReport
1119backend/app/services/report_agent.py267前端应监听此日志来判断一个章节是否真正完成,并获取完整内容deliberatebackend-docstringReport
1120backend/app/services/report_agent.py282"""记录报告生成完成"""deliberatebackend-docstringReport
1121backend/app/services/report_agent.py294"""记录错误"""deliberatebackend-docstringReport
1122backend/app/services/report_agent.py309Report Agent 控制台日志记录器deliberatebackend-docstringReport
1123backend/app/services/report_agent.py311将控制台风格的日志INFO、WARNING等写入报告文件夹中的 console_log.txt 文件。deliberatebackend-docstringReport
1124backend/app/services/report_agent.py312这些日志与 agent_log.jsonl 不同,是纯文本格式的控制台输出。deliberatebackend-docstringReport
1125backend/app/services/report_agent.py317初始化控制台日志记录器deliberatebackend-docstringReport
1126backend/app/services/report_agent.py320report_id: 报告ID用于确定日志文件路径deliberatebackend-docstringReport
1127backend/app/services/report_agent.py331"""确保日志文件所在目录存在"""deliberatebackend-docstringReport
1128backend/app/services/report_agent.py336"""设置文件处理器,将日志同时写入文件"""deliberatebackend-docstringReport
1129backend/app/services/report_agent.py339# 创建文件处理器deliberatebackend-commentReport
1130backend/app/services/report_agent.py347# 使用与控制台相同的简洁格式deliberatebackend-commentReport
1131backend/app/services/report_agent.py354# 添加到 report_agent 相关的 loggerdeliberatebackend-commentReport
1132backend/app/services/report_agent.py362# 避免重复添加deliberatebackend-commentReport
1133backend/app/services/report_agent.py367"""关闭文件处理器并从 logger 中移除"""deliberatebackend-docstringReport
1134backend/app/services/report_agent.py385"""析构时确保关闭文件处理器"""deliberatebackend-docstringReport
1135backend/app/services/report_agent.py390"""报告状态"""deliberatebackend-docstringReport
1136backend/app/services/report_agent.py400"""报告章节"""deliberatebackend-docstringReport
1137backend/app/services/report_agent.py411"""转换为Markdown格式"""deliberatebackend-docstringReport
1138backend/app/services/report_agent.py420"""报告大纲"""deliberatebackend-docstringReport
1139backend/app/services/report_agent.py433"""转换为Markdown格式"""deliberatebackend-docstringReport
1140backend/app/services/report_agent.py443"""完整报告"""deliberatebackend-docstringReport
1141backend/app/services/report_agent.py471# Prompt 模板常量deliberatebackend-commentReport
1142backend/app/services/report_agent.py474# ── 工具描述 ──deliberatebackend-commentReport
1143backend/app/services/report_agent.py550# ── 大纲规划 prompt ──deliberatebackend-commentReport
1144backend/app/services/report_agent.py613# ── 章节生成 prompt ──deliberatebackend-commentReport
1145backend/app/services/report_agent.py794# ── ReACT 循环内消息模板 ──deliberatebackend-commentReport
1146backend/app/services/report_agent.py861# ReportAgent 主类deliberatebackend-commentReport
1147backend/app/services/report_agent.py867Report Agent - 模拟报告生成Agentdeliberatebackend-docstringReport
1148backend/app/services/report_agent.py869采用ReACTReasoning + Acting模式deliberatebackend-docstringReport
1149backend/app/services/report_agent.py8701. 规划阶段:分析模拟需求,规划报告目录结构deliberatebackend-docstringReport
1150backend/app/services/report_agent.py8712. 生成阶段:逐章节生成内容,每章节可多次调用工具获取信息deliberatebackend-docstringReport
1151backend/app/services/report_agent.py8723. 反思阶段:检查内容完整性和准确性deliberatebackend-docstringReport
1152backend/app/services/report_agent.py875# 最大工具调用次数(每个章节)deliberatebackend-commentReport
1153backend/app/services/report_agent.py878# 最大反思轮数deliberatebackend-commentReport
1154backend/app/services/report_agent.py881# 对话中的最大工具调用次数deliberatebackend-commentReport
1155backend/app/services/report_agent.py893初始化Report Agentdeliberatebackend-docstringReport
1156backend/app/services/report_agent.py896graph_id: 图谱IDdeliberatebackend-docstringReport
1157backend/app/services/report_agent.py897simulation_id: 模拟IDdeliberatebackend-docstringReport
1158backend/app/services/report_agent.py898simulation_requirement: 模拟需求描述deliberatebackend-docstringReport
1159backend/app/services/report_agent.py899llm_client: LLM客户端可选deliberatebackend-docstringReport
1160backend/app/services/report_agent.py900zep_tools: Zep工具服务可选deliberatebackend-docstringReport
1161backend/app/services/report_agent.py909# 工具定义deliberatebackend-commentReport
1162backend/app/services/report_agent.py912# 日志记录器(在 generate_report 中初始化)deliberatebackend-commentReport
1163backend/app/services/report_agent.py914# 控制台日志记录器(在 generate_report 中初始化)deliberatebackend-commentReport
1164backend/app/services/report_agent.py920"""定义可用工具"""deliberatebackend-docstringReport
1165backend/app/services/report_agent.py958执行工具调用deliberatebackend-docstringReport
1166backend/app/services/report_agent.py961tool_name: 工具名称deliberatebackend-docstringReport
1167backend/app/services/report_agent.py962parameters: 工具参数deliberatebackend-docstringReport
1168backend/app/services/report_agent.py963report_context: 报告上下文用于InsightForgedeliberatebackend-docstringReport
1169backend/app/services/report_agent.py966工具执行结果(文本格式)deliberatebackend-docstringReport
1170backend/app/services/report_agent.py983# 广度搜索 - 获取全貌deliberatebackend-commentReport
1171backend/app/services/report_agent.py996# 简单搜索 - 快速检索deliberatebackend-commentReport
1172backend/app/services/report_agent.py1009# 深度采访 - 调用真实的OASIS采访API获取模拟Agent的回答双平台deliberatebackend-commentReport
1173backend/app/services/report_agent.py1023# ========== 向后兼容的旧工具(内部重定向到新工具) ==========deliberatebackend-commentReport
1174backend/app/services/report_agent.py1026# 重定向到 quick_searchdeliberatebackend-commentReport
1175backend/app/services/report_agent.py1043# 重定向到 insight_forge因为它更强大deliberatebackend-commentReport
1176backend/app/services/report_agent.py1064# 合法的工具名称集合,用于裸 JSON 兜底解析时校验deliberatebackend-commentReport
1177backend/app/services/report_agent.py1069从LLM响应中解析工具调用deliberatebackend-docstringReport
1178backend/app/services/report_agent.py1071支持的格式(按优先级):deliberatebackend-docstringReport
1179backend/app/services/report_agent.py10732. 裸 JSON响应整体或单行就是一个工具调用 JSONdeliberatebackend-docstringReport
1180backend/app/services/report_agent.py1077# 格式1: XML风格标准格式deliberatebackend-commentReport
1181backend/app/services/report_agent.py1089# 格式2: 兜底 - LLM 直接输出裸 JSON没包 <tool_call> 标签)deliberatebackend-commentReport
1182backend/app/services/report_agent.py1090# 只在格式1未匹配时尝试避免误匹配正文中的 JSONdeliberatebackend-commentReport
1183backend/app/services/report_agent.py1101# 响应可能包含思考文字 + 裸 JSON尝试提取最后一个 JSON 对象deliberatebackend-commentReport
1184backend/app/services/report_agent.py1115"""校验解析出的 JSON 是否是合法的工具调用"""deliberatebackend-docstringReport
1185backend/app/services/report_agent.py1116# 支持 {"name": ..., "parameters": ...} 和 {"tool": ..., "params": ...} 两种键名deliberatebackend-commentReport
1186backend/app/services/report_agent.py1119# 统一键名为 name / parametersdeliberatebackend-commentReport
1187backend/app/services/report_agent.py1128"""生成工具描述文本"""deliberatebackend-docstringReport
1188backend/app/services/report_agent.py1142规划报告大纲deliberatebackend-docstringReport
1189backend/app/services/report_agent.py1144使用LLM分析模拟需求规划报告的目录结构deliberatebackend-docstringReport
1190backend/app/services/report_agent.py1147progress_callback: 进度回调函数deliberatebackend-docstringReport
1191backend/app/services/report_agent.py1150ReportOutline: 报告大纲deliberatebackend-docstringReport
1192backend/app/services/report_agent.py1157# 首先获取模拟上下文deliberatebackend-commentReport
1193backend/app/services/report_agent.py1188# 解析大纲deliberatebackend-commentReport
1194backend/app/services/report_agent.py1210# 返回默认大纲3个章节作为fallbackdeliberatebackend-commentReport
1195backend/app/services/report_agent.py1230使用ReACT模式生成单个章节内容deliberatebackend-docstringReport
1196backend/app/services/report_agent.py1232ReACT循环deliberatebackend-docstringReport
1197backend/app/services/report_agent.py12331. Thought思考- 分析需要什么信息deliberatebackend-docstringReport
1198backend/app/services/report_agent.py12342. Action行动- 调用工具获取信息deliberatebackend-docstringReport
1199backend/app/services/report_agent.py12353. Observation观察- 分析工具返回结果deliberatebackend-docstringReport
1200backend/app/services/report_agent.py12364. 重复直到信息足够或达到最大次数deliberatebackend-docstringReport
1201backend/app/services/report_agent.py12375. Final Answer最终回答- 生成章节内容deliberatebackend-docstringReport
1202backend/app/services/report_agent.py1240section: 要生成的章节deliberatebackend-docstringReport
1203backend/app/services/report_agent.py1241outline: 完整大纲deliberatebackend-docstringReport
1204backend/app/services/report_agent.py1242previous_sections: 之前章节的内容(用于保持连贯性)deliberatebackend-docstringReport
1205backend/app/services/report_agent.py1243progress_callback: 进度回调deliberatebackend-docstringReport
1206backend/app/services/report_agent.py1244section_index: 章节索引(用于日志记录)deliberatebackend-docstringReport
1207backend/app/services/report_agent.py1247章节内容Markdown格式deliberatebackend-docstringReport
1208backend/app/services/report_agent.py1251# 记录章节开始日志deliberatebackend-commentReport
1209backend/app/services/report_agent.py1264# 构建用户prompt - 每个已完成章节各传入最大4000字deliberatebackend-commentReport
1210backend/app/services/report_agent.py1268# 每个章节最多4000字deliberatebackend-commentReport
1211backend/app/services/report_agent.py1285# ReACT循环deliberatebackend-commentReport
1212backend/app/services/report_agent.py1287max_iterations = 5 # 最大迭代轮数deliberatebackend-docstringReport
1213backend/app/services/report_agent.py1288min_tool_calls = 3 # 最少工具调用次数deliberatebackend-docstringReport
1214backend/app/services/report_agent.py1289conflict_retries = 0 # 工具调用与Final Answer同时出现的连续冲突次数deliberatebackend-docstringReport
1215backend/app/services/report_agent.py1290used_tools = set() # 记录已调用过的工具名deliberatebackend-docstringReport
1216backend/app/services/report_agent.py1293# 报告上下文用于InsightForge的子问题生成deliberatebackend-commentReport
1217backend/app/services/report_agent.py1304# 调用LLMdeliberatebackend-commentReport
1218backend/app/services/report_agent.py1311# 检查 LLM 返回是否为 NoneAPI 异常或内容为空)deliberatebackend-commentReport
1219backend/app/services/report_agent.py1314# 如果还有迭代次数,添加消息并重试deliberatebackend-commentReport
1220backend/app/services/report_agent.py1319# 最后一次迭代也返回 None跳出循环进入强制收尾deliberatebackend-commentReport
1221backend/app/services/report_agent.py1324# 解析一次,复用结果deliberatebackend-commentReport
1222backend/app/services/report_agent.py1329# ── 冲突处理LLM 同时输出了工具调用和 Final Answer ──deliberatebackend-commentReport
1223backend/app/services/report_agent.py1337# 前两次:丢弃本次响应,要求 LLM 重新回复deliberatebackend-commentReport
1224backend/app/services/report_agent.py1351# 第三次:降级处理,截断到第一个工具调用,强制执行deliberatebackend-commentReport
1225backend/app/services/report_agent.py1363# 记录 LLM 响应日志deliberatebackend-commentReport
1226backend/app/services/report_agent.py1374# ── 情况1LLM 输出了 Final Answer ──deliberatebackend-commentReport
1227backend/app/services/report_agent.py1376# 工具调用次数不足,拒绝并要求继续调工具deliberatebackend-commentReport
1228backend/app/services/report_agent.py1391# 正常结束deliberatebackend-commentReport
1229backend/app/services/report_agent.py1404# ── 情况2LLM 尝试调用工具 ──deliberatebackend-commentReport
1230backend/app/services/report_agent.py1406# 工具额度已耗尽 → 明确告知,要求输出 Final Answerdeliberatebackend-commentReport
1231backend/app/services/report_agent.py1418# 只执行第一个工具调用deliberatebackend-commentReport
1232backend/app/services/report_agent.py1450# 构建未使用工具提示deliberatebackend-commentReport
1233backend/app/services/report_agent.py1470# ── 情况3既没有工具调用也没有 Final Answer ──deliberatebackend-commentReport
1234backend/app/services/report_agent.py1474# 工具调用次数不足,推荐未用过的工具deliberatebackend-commentReport
1235backend/app/services/report_agent.py1488# 工具调用已足够LLM 输出了内容但没带 "Final Answer:" 前缀deliberatebackend-commentReport
1236backend/app/services/report_agent.py1489# 直接将这段内容作为最终答案,不再空转deliberatebackend-commentReport
1237backend/app/services/report_agent.py1502# 达到最大迭代次数,强制生成内容deliberatebackend-commentReport
1238backend/app/services/report_agent.py1512# 检查强制收尾时 LLM 返回是否为 Nonedeliberatebackend-commentReport
1239backend/app/services/report_agent.py1521# 记录章节内容生成完成日志deliberatebackend-commentReport
1240backend/app/services/report_agent.py1538生成完整报告(分章节实时输出)deliberatebackend-docstringReport
1241backend/app/services/report_agent.py1540每个章节生成完成后立即保存到文件夹,不需要等待整个报告完成。deliberatebackend-docstringReport
1242backend/app/services/report_agent.py1541文件结构:deliberatebackend-docstringReport
1243backend/app/services/report_agent.py1543meta.json - 报告元信息deliberatebackend-docstringReport
1244backend/app/services/report_agent.py1544outline.json - 报告大纲deliberatebackend-docstringReport
1245backend/app/services/report_agent.py1545progress.json - 生成进度deliberatebackend-docstringReport
1246backend/app/services/report_agent.py1546section_01.md - 第1章节deliberatebackend-docstringReport
1247backend/app/services/report_agent.py1547section_02.md - 第2章节deliberatebackend-docstringReport
1248backend/app/services/report_agent.py1549full_report.md - 完整报告deliberatebackend-docstringReport
1249backend/app/services/report_agent.py1552progress_callback: 进度回调函数 (stage, progress, message)deliberatebackend-docstringReport
1250backend/app/services/report_agent.py1553report_id: 报告ID可选如果不传则自动生成deliberatebackend-docstringReport
1251backend/app/services/report_agent.py1556Report: 完整报告deliberatebackend-docstringReport
1252backend/app/services/report_agent.py1560# 如果没有传入 report_id则自动生成deliberatebackend-commentReport
1253backend/app/services/report_agent.py1574# 已完成的章节标题列表(用于进度追踪)deliberatebackend-commentReport
1254backend/app/services/report_agent.py1578# 初始化:创建报告文件夹并保存初始状态deliberatebackend-commentReport
1255backend/app/services/report_agent.py1581# 初始化日志记录器(结构化日志 agent_log.jsonldeliberatebackend-commentReport
1256backend/app/services/report_agent.py1589# 初始化控制台日志记录器console_log.txtdeliberatebackend-commentReport
1257backend/app/services/report_agent.py1598# 阶段1: 规划大纲deliberatebackend-commentReport
1258backend/app/services/report_agent.py1605# 记录规划开始日志deliberatebackend-commentReport
1259backend/app/services/report_agent.py1617# 记录规划完成日志deliberatebackend-commentReport
1260backend/app/services/report_agent.py1620# 保存大纲到文件deliberatebackend-commentReport
1261backend/app/services/report_agent.py1630# 阶段2: 逐章节生成(分章节保存)deliberatebackend-commentReport
1262backend/app/services/report_agent.py1634generated_sections = [] # 保存内容用于上下文deliberatebackend-docstringReport
1263backend/app/services/report_agent.py1640# 更新进度deliberatebackend-commentReport
1264backend/app/services/report_agent.py1655# 生成主章节内容deliberatebackend-commentReport
1265backend/app/services/report_agent.py1672# 保存章节deliberatebackend-commentReport
1266backend/app/services/report_agent.py1676# 记录章节完成日志deliberatebackend-commentReport
1267backend/app/services/report_agent.py1688# 更新进度deliberatebackend-commentReport
1268backend/app/services/report_agent.py1697# 阶段3: 组装完整报告deliberatebackend-commentReport
1269backend/app/services/report_agent.py1706# 使用ReportManager组装完整报告deliberatebackend-commentReport
1270backend/app/services/report_agent.py1711# 计算总耗时deliberatebackend-commentReport
1271backend/app/services/report_agent.py1714# 记录报告完成日志deliberatebackend-commentReport
1272backend/app/services/report_agent.py1721# 保存最终报告deliberatebackend-commentReport
1273backend/app/services/report_agent.py1733# 关闭控制台日志记录器deliberatebackend-commentReport
1274backend/app/services/report_agent.py1745# 记录错误日志deliberatebackend-commentReport
1275backend/app/services/report_agent.py1749# 保存失败状态deliberatebackend-commentReport
1276backend/app/services/report_agent.py1757pass # 忽略保存失败的错误deliberatebackend-docstringReport
1277backend/app/services/report_agent.py1759# 关闭控制台日志记录器deliberatebackend-commentReport
1278backend/app/services/report_agent.py1772与Report Agent对话deliberatebackend-docstringReport
1279backend/app/services/report_agent.py1774在对话中Agent可以自主调用检索工具来回答问题deliberatebackend-docstringReport
1280backend/app/services/report_agent.py1777message: 用户消息deliberatebackend-docstringReport
1281backend/app/services/report_agent.py1778chat_history: 对话历史deliberatebackend-docstringReport
1282backend/app/services/report_agent.py1782"response": "Agent回复",gapbackend-prompt-labelReport
1283backend/app/services/report_agent.py1783"tool_calls": [调用的工具列表],gapbackend-prompt-labelReport
1284backend/app/services/report_agent.py1784"sources": [信息来源]gapbackend-prompt-labelReport
1285backend/app/services/report_agent.py1791# 获取已生成的报告内容deliberatebackend-commentReport
1286backend/app/services/report_agent.py1796# 限制报告长度,避免上下文过长deliberatebackend-commentReport
1287backend/app/services/report_agent.py1810# 构建消息deliberatebackend-commentReport
1288backend/app/services/report_agent.py1813# 添加历史对话deliberatebackend-commentReport
1289backend/app/services/report_agent.py1814for h in chat_history[-10:]: # 限制历史长度deliberatebackend-docstringReport
1290backend/app/services/report_agent.py1817# 添加用户消息deliberatebackend-commentReport
1291backend/app/services/report_agent.py1823# ReACT循环简化版deliberatebackend-commentReport
1292backend/app/services/report_agent.py1825max_iterations = 2 # 减少迭代轮数deliberatebackend-docstringReport
1293backend/app/services/report_agent.py1833# 解析工具调用deliberatebackend-commentReport
1294backend/app/services/report_agent.py1837# 没有工具调用,直接返回响应deliberatebackend-commentReport
1295backend/app/services/report_agent.py1847# 执行工具调用(限制数量)deliberatebackend-commentReport
1296backend/app/services/report_agent.py1849for call in tool_calls[:1]: # 每轮最多执行1次工具调用deliberatebackend-docstringReport
1297backend/app/services/report_agent.py1855"result": result[:1500] # 限制结果长度gapbackend-prompt-labelReport
1298backend/app/services/report_agent.py1859# 将结果添加到消息deliberatebackend-commentReport
1299backend/app/services/report_agent.py1867# 达到最大迭代,获取最终响应deliberatebackend-commentReport
1300backend/app/services/report_agent.py1873# 清理响应deliberatebackend-commentReport
1301backend/app/services/report_agent.py1886报告管理器deliberatebackend-docstringReport
1302backend/app/services/report_agent.py1888负责报告的持久化存储和检索deliberatebackend-docstringReport
1303backend/app/services/report_agent.py1890文件结构(分章节输出):deliberatebackend-docstringReport
1304backend/app/services/report_agent.py1893meta.json - 报告元信息和状态deliberatebackend-docstringReport
1305backend/app/services/report_agent.py1894outline.json - 报告大纲deliberatebackend-docstringReport
1306backend/app/services/report_agent.py1895progress.json - 生成进度deliberatebackend-docstringReport
1307backend/app/services/report_agent.py1896section_01.md - 第1章节deliberatebackend-docstringReport
1308backend/app/services/report_agent.py1897section_02.md - 第2章节deliberatebackend-docstringReport
1309backend/app/services/report_agent.py1899full_report.md - 完整报告deliberatebackend-docstringReport
1310backend/app/services/report_agent.py1902# 报告存储目录deliberatebackend-commentReport
1311backend/app/services/report_agent.py1907"""确保报告根目录存在"""deliberatebackend-docstringReport
1312backend/app/services/report_agent.py1912"""获取报告文件夹路径"""deliberatebackend-docstringReport
1313backend/app/services/report_agent.py1917"""确保报告文件夹存在并返回路径"""deliberatebackend-docstringReport
1314backend/app/services/report_agent.py1924"""获取报告元信息文件路径"""deliberatebackend-docstringReport
1315backend/app/services/report_agent.py1929"""获取完整报告Markdown文件路径"""deliberatebackend-docstringReport
1316backend/app/services/report_agent.py1934"""获取大纲文件路径"""deliberatebackend-docstringReport
1317backend/app/services/report_agent.py1939"""获取进度文件路径"""deliberatebackend-docstringReport
1318backend/app/services/report_agent.py1944"""获取章节Markdown文件路径"""deliberatebackend-docstringReport
1319backend/app/services/report_agent.py1949"""获取 Agent 日志文件路径"""deliberatebackend-docstringReport
1320backend/app/services/report_agent.py1954"""获取控制台日志文件路径"""deliberatebackend-docstringReport
1321backend/app/services/report_agent.py1960获取控制台日志内容deliberatebackend-docstringReport
1322backend/app/services/report_agent.py1962这是报告生成过程中的控制台输出日志INFO、WARNING等deliberatebackend-docstringReport
1323backend/app/services/report_agent.py1963与 agent_log.jsonl 的结构化日志不同。deliberatebackend-docstringReport
1324backend/app/services/report_agent.py1966report_id: 报告IDdeliberatebackend-docstringReport
1325backend/app/services/report_agent.py1967from_line: 从第几行开始读取用于增量获取0 表示从头开始)deliberatebackend-docstringReport
1326backend/app/services/report_agent.py1971"logs": [日志行列表],gapbackend-prompt-labelReport
1327backend/app/services/report_agent.py1972"total_lines": 总行数,gapbackend-prompt-labelReport
1328backend/app/services/report_agent.py1973"from_line": 起始行号,gapbackend-prompt-labelReport
1329backend/app/services/report_agent.py1974"has_more": 是否还有更多日志gapbackend-prompt-labelReport
1330backend/app/services/report_agent.py1994# 保留原始日志行,去掉末尾换行符deliberatebackend-commentReport
1331backend/app/services/report_agent.py2001"has_more": False # 已读取到末尾gapbackend-prompt-labelReport
1332backend/app/services/report_agent.py2007获取完整的控制台日志(一次性获取全部)deliberatebackend-docstringReport
1333backend/app/services/report_agent.py2010report_id: 报告IDdeliberatebackend-docstringReport
1334backend/app/services/report_agent.py2013日志行列表deliberatebackend-docstringReport
1335backend/app/services/report_agent.py2021获取 Agent 日志内容deliberatebackend-docstringReport
1336backend/app/services/report_agent.py2024report_id: 报告IDdeliberatebackend-docstringReport
1337backend/app/services/report_agent.py2025from_line: 从第几行开始读取用于增量获取0 表示从头开始)deliberatebackend-docstringReport
1338backend/app/services/report_agent.py2029"logs": [日志条目列表],gapbackend-prompt-labelReport
1339backend/app/services/report_agent.py2030"total_lines": 总行数,gapbackend-prompt-labelReport
1340backend/app/services/report_agent.py2031"from_line": 起始行号,gapbackend-prompt-labelReport
1341backend/app/services/report_agent.py2032"has_more": 是否还有更多日志gapbackend-prompt-labelReport
1342backend/app/services/report_agent.py2056# 跳过解析失败的行deliberatebackend-commentReport
1343backend/app/services/report_agent.py2063"has_more": False # 已读取到末尾gapbackend-prompt-labelReport
1344backend/app/services/report_agent.py2069获取完整的 Agent 日志(用于一次性获取全部)deliberatebackend-docstringReport
1345backend/app/services/report_agent.py2072report_id: 报告IDdeliberatebackend-docstringReport
1346backend/app/services/report_agent.py2075日志条目列表deliberatebackend-docstringReport
1347backend/app/services/report_agent.py2083保存报告大纲deliberatebackend-docstringReport
1348backend/app/services/report_agent.py2085在规划阶段完成后立即调用deliberatebackend-docstringReport
1349backend/app/services/report_agent.py2102保存单个章节deliberatebackend-docstringReport
1350backend/app/services/report_agent.py2104在每个章节生成完成后立即调用,实现分章节输出deliberatebackend-docstringReport
1351backend/app/services/report_agent.py2107report_id: 报告IDdeliberatebackend-docstringReport
1352backend/app/services/report_agent.py2108section_index: 章节索引从1开始deliberatebackend-docstringReport
1353backend/app/services/report_agent.py2109section: 章节对象deliberatebackend-docstringReport
1354backend/app/services/report_agent.py2112保存的文件路径deliberatebackend-docstringReport
1355backend/app/services/report_agent.py2116# 构建章节Markdown内容 - 清理可能存在的重复标题deliberatebackend-commentReport
1356backend/app/services/report_agent.py2122# 保存文件deliberatebackend-commentReport
1357backend/app/services/report_agent.py2134清理章节内容deliberatebackend-docstringReport
1358backend/app/services/report_agent.py21361. 移除内容开头与章节标题重复的Markdown标题行deliberatebackend-docstringReport
1359backend/app/services/report_agent.py21372. 将所有 ### 及以下级别的标题转换为粗体文本deliberatebackend-docstringReport
1360backend/app/services/report_agent.py2140content: 原始内容deliberatebackend-docstringReport
1361backend/app/services/report_agent.py2141section_title: 章节标题deliberatebackend-docstringReport
1362backend/app/services/report_agent.py2144清理后的内容deliberatebackend-docstringReport
1363backend/app/services/report_agent.py2159# 检查是否是Markdown标题行deliberatebackend-commentReport
1364backend/app/services/report_agent.py2166# 检查是否是与章节标题重复的标题跳过前5行内的重复deliberatebackend-commentReport
1365backend/app/services/report_agent.py2172# 将所有级别的标题(#, ##, ###, ####等)转换为粗体deliberatebackend-commentReport
1366backend/app/services/report_agent.py2173# 因为章节标题由系统添加,内容中不应有任何标题deliberatebackend-commentReport
1367backend/app/services/report_agent.py2175cleaned_lines.append("") # 添加空行gapbackend-prompt-labelReport
1368backend/app/services/report_agent.py2178# 如果上一行是被跳过的标题,且当前行为空,也跳过deliberatebackend-commentReport
1369backend/app/services/report_agent.py2186# 移除开头的空行deliberatebackend-commentReport
1370backend/app/services/report_agent.py2190# 移除开头的分隔线deliberatebackend-commentReport
1371backend/app/services/report_agent.py2193# 同时移除分隔线后的空行deliberatebackend-commentReport
1372backend/app/services/report_agent.py2210更新报告生成进度deliberatebackend-docstringReport
1373backend/app/services/report_agent.py2212前端可以通过读取progress.json获取实时进度deliberatebackend-docstringReport
1374backend/app/services/report_agent.py2230"""获取报告生成进度"""deliberatebackend-docstringReport
1375backend/app/services/report_agent.py2242获取已生成的章节列表deliberatebackend-docstringReport
1376backend/app/services/report_agent.py2244返回所有已保存的章节文件信息deliberatebackend-docstringReport
1377backend/app/services/report_agent.py2258# 从文件名解析章节索引deliberatebackend-commentReport
1378backend/app/services/report_agent.py2273组装完整报告deliberatebackend-docstringReport
1379backend/app/services/report_agent.py2275从已保存的章节文件组装完整报告,并进行标题清理deliberatebackend-docstringReport
1380backend/app/services/report_agent.py2279# 构建报告头部deliberatebackend-commentReport
1381backend/app/services/report_agent.py2284# 按顺序读取所有章节文件deliberatebackend-commentReport
1382backend/app/services/report_agent.py2289# 后处理:清理整个报告的标题问题deliberatebackend-commentReport
1383backend/app/services/report_agent.py2292# 保存完整报告deliberatebackend-commentReport
1384backend/app/services/report_agent.py2303后处理报告内容deliberatebackend-docstringReport
1385backend/app/services/report_agent.py23051. 移除重复的标题deliberatebackend-docstringReport
1386backend/app/services/report_agent.py23062. 保留报告主标题(#)和章节标题(##),移除其他级别的标题(###, ####等)deliberatebackend-docstringReport
1387backend/app/services/report_agent.py23073. 清理多余的空行和分隔线deliberatebackend-docstringReport
1388backend/app/services/report_agent.py2310content: 原始报告内容deliberatebackend-docstringReport
1389backend/app/services/report_agent.py2311outline: 报告大纲deliberatebackend-docstringReport
1390backend/app/services/report_agent.py2314处理后的内容deliberatebackend-docstringReport
1391backend/app/services/report_agent.py2322# 收集大纲中的所有章节标题deliberatebackend-commentReport
1392backend/app/services/report_agent.py2332# 检查是否是标题行deliberatebackend-commentReport
1393backend/app/services/report_agent.py2339# 检查是否是重复标题在连续5行内出现相同内容的标题deliberatebackend-commentReport
1394backend/app/services/report_agent.py2351# 跳过重复标题及其后的空行deliberatebackend-commentReport
1395backend/app/services/report_agent.py2357# 标题层级处理:deliberatebackend-commentReport
1396backend/app/services/report_agent.py2358# - # (level=1) 只保留报告主标题deliberatebackend-commentReport
1397backend/app/services/report_agent.py2359# - ## (level=2) 保留章节标题deliberatebackend-commentReport
1398backend/app/services/report_agent.py2360# - ### 及以下 (level>=3) 转换为粗体文本deliberatebackend-commentReport
1399backend/app/services/report_agent.py2364# 保留报告主标题deliberatebackend-commentReport
1400backend/app/services/report_agent.py2368# 章节标题错误使用了#,修正为##deliberatebackend-commentReport
1401backend/app/services/report_agent.py2372# 其他一级标题转为粗体deliberatebackend-commentReport
1402backend/app/services/report_agent.py2378# 保留章节标题deliberatebackend-commentReport
1403backend/app/services/report_agent.py2382# 非章节的二级标题转为粗体deliberatebackend-commentReport
1404backend/app/services/report_agent.py2387# ### 及以下级别的标题转换为粗体文本deliberatebackend-commentReport
1405backend/app/services/report_agent.py2396# 跳过标题后紧跟的分隔线deliberatebackend-commentReport
1406backend/app/services/report_agent.py2401# 标题后只保留一个空行deliberatebackend-commentReport
1407backend/app/services/report_agent.py2412# 清理连续的多个空行保留最多2个deliberatebackend-commentReport
1408backend/app/services/report_agent.py2428"""保存报告元信息和完整报告"""deliberatebackend-docstringReport
1409backend/app/services/report_agent.py2431# 保存元信息JSONdeliberatebackend-commentReport
1410backend/app/services/report_agent.py2435# 保存大纲deliberatebackend-commentReport
1411backend/app/services/report_agent.py2439# 保存完整Markdown报告deliberatebackend-commentReport
1412backend/app/services/report_agent.py2448"""获取报告"""deliberatebackend-docstringReport
1413backend/app/services/report_agent.py2452# 兼容旧格式检查直接存储在reports目录下的文件deliberatebackend-commentReport
1414backend/app/services/report_agent.py2462# 重建Report对象deliberatebackend-commentReport
1415backend/app/services/report_agent.py2478# 如果markdown_content为空尝试从full_report.md读取deliberatebackend-commentReport
1416backend/app/services/report_agent.py2501"""根据模拟ID获取报告"""deliberatebackend-docstringReport
1417backend/app/services/report_agent.py2506# 新格式:文件夹deliberatebackend-commentReport
1418backend/app/services/report_agent.py2511# 兼容旧格式JSON文件deliberatebackend-commentReport
1419backend/app/services/report_agent.py2522"""列出报告"""deliberatebackend-docstringReport
1420backend/app/services/report_agent.py2528# 新格式:文件夹deliberatebackend-commentReport
1421backend/app/services/report_agent.py2534# 兼容旧格式JSON文件deliberatebackend-commentReport
1422backend/app/services/report_agent.py2542# 按创建时间倒序deliberatebackend-commentReport
1423backend/app/services/report_agent.py2549"""删除报告(整个文件夹)"""deliberatebackend-docstringReport
1424backend/app/services/report_agent.py2554# 新格式:删除整个文件夹deliberatebackend-commentReport
1425backend/app/services/report_agent.py2560# 兼容旧格式:删除单独的文件deliberatebackend-commentReport
1426backend/app/services/simulation_config_generator.py2模拟配置智能生成器deliberatebackend-docstringSimulation
1427backend/app/services/simulation_config_generator.py3使用LLM根据模拟需求、文档内容、图谱信息自动生成细致的模拟参数deliberatebackend-docstringSimulation
1428backend/app/services/simulation_config_generator.py4实现全程自动化,无需人工设置参数deliberatebackend-docstringSimulation
1429backend/app/services/simulation_config_generator.py6采用分步生成策略,避免一次性生成过长内容导致失败:deliberatebackend-docstringSimulation
1430backend/app/services/simulation_config_generator.py71. 生成时间配置deliberatebackend-docstringSimulation
1431backend/app/services/simulation_config_generator.py82. 生成事件配置deliberatebackend-docstringSimulation
1432backend/app/services/simulation_config_generator.py93. 分批生成Agent配置deliberatebackend-docstringSimulation
1433backend/app/services/simulation_config_generator.py104. 生成平台配置deliberatebackend-docstringSimulation
1434backend/app/services/simulation_config_generator.py28# 中国作息时间配置(北京时间)deliberatebackend-commentSimulation
1435backend/app/services/simulation_config_generator.py30# 深夜时段(几乎无人活动)deliberatebackend-commentSimulation
1436backend/app/services/simulation_config_generator.py32# 早间时段(逐渐醒来)deliberatebackend-commentSimulation
1437backend/app/services/simulation_config_generator.py34# 工作时段deliberatebackend-commentSimulation
1438backend/app/services/simulation_config_generator.py36# 晚间高峰(最活跃)deliberatebackend-commentSimulation
1439backend/app/services/simulation_config_generator.py38# 夜间时段(活跃度下降)deliberatebackend-commentSimulation
1440backend/app/services/simulation_config_generator.py40# 活跃度系数deliberatebackend-commentSimulation
1441backend/app/services/simulation_config_generator.py42"dead": 0.05, # 凌晨几乎无人gapbackend-prompt-labelSimulation
1442backend/app/services/simulation_config_generator.py43"morning": 0.4, # 早间逐渐活跃gapbackend-prompt-labelSimulation
1443backend/app/services/simulation_config_generator.py44"work": 0.7, # 工作时段中等gapbackend-prompt-labelSimulation
1444backend/app/services/simulation_config_generator.py45"peak": 1.5, # 晚间高峰gapbackend-prompt-labelSimulation
1445backend/app/services/simulation_config_generator.py46"night": 0.5 # 深夜下降gapbackend-prompt-labelSimulation
1446backend/app/services/simulation_config_generator.py53"""单个Agent的活动配置"""deliberatebackend-docstringSimulation
1447backend/app/services/simulation_config_generator.py59# 活跃度配置 (0.0-1.0)deliberatebackend-commentSimulation
1448backend/app/services/simulation_config_generator.py60activity_level: float = 0.5 # 整体活跃度deliberatebackend-docstringSimulation
1449backend/app/services/simulation_config_generator.py62# 发言频率(每小时预期发言次数)deliberatebackend-commentSimulation
1450backend/app/services/simulation_config_generator.py66# 活跃时间段24小时制0-23deliberatebackend-commentSimulation
1451backend/app/services/simulation_config_generator.py69# 响应速度(对热点事件的反应延迟,单位:模拟分钟)deliberatebackend-commentSimulation
1452backend/app/services/simulation_config_generator.py73# 情感倾向 (-1.0到1.0,负面到正面)deliberatebackend-commentSimulation
1453backend/app/services/simulation_config_generator.py76# 立场(对特定话题的态度)deliberatebackend-commentSimulation
1454backend/app/services/simulation_config_generator.py79# 影响力权重决定其发言被其他Agent看到的概率deliberatebackend-commentSimulation
1455backend/app/services/simulation_config_generator.py85"""时间模拟配置(基于中国人作息习惯)"""deliberatebackend-docstringSimulation
1456backend/app/services/simulation_config_generator.py86# 模拟总时长(模拟小时数)deliberatebackend-commentSimulation
1457backend/app/services/simulation_config_generator.py87total_simulation_hours: int = 72 # 默认模拟72小时3天deliberatebackend-docstringSimulation
1458backend/app/services/simulation_config_generator.py89# 每轮代表的时间(模拟分钟)- 默认60分钟1小时加快时间流速deliberatebackend-commentSimulation
1459backend/app/services/simulation_config_generator.py92# 每小时激活的Agent数量范围deliberatebackend-commentSimulation
1460backend/app/services/simulation_config_generator.py96# 高峰时段晚间19-22点中国人最活跃的时间deliberatebackend-commentSimulation
1461backend/app/services/simulation_config_generator.py100# 低谷时段凌晨0-5点几乎无人活动deliberatebackend-commentSimulation
1462backend/app/services/simulation_config_generator.py102off_peak_activity_multiplier: float = 0.05 # 凌晨活跃度极低deliberatebackend-docstringSimulation
1463backend/app/services/simulation_config_generator.py104# 早间时段deliberatebackend-commentSimulation
1464backend/app/services/simulation_config_generator.py108# 工作时段deliberatebackend-commentSimulation
1465backend/app/services/simulation_config_generator.py115"""事件配置"""deliberatebackend-docstringSimulation
1466backend/app/services/simulation_config_generator.py116# 初始事件(模拟开始时的触发事件)deliberatebackend-commentSimulation
1467backend/app/services/simulation_config_generator.py119# 定时事件(在特定时间触发的事件)deliberatebackend-commentSimulation
1468backend/app/services/simulation_config_generator.py122# 热点话题关键词deliberatebackend-commentSimulation
1469backend/app/services/simulation_config_generator.py125# 舆论引导方向deliberatebackend-commentSimulation
1470backend/app/services/simulation_config_generator.py131"""平台特定配置"""deliberatebackend-docstringSimulation
1471backend/app/services/simulation_config_generator.py134# 推荐算法权重deliberatebackend-commentSimulation
1472backend/app/services/simulation_config_generator.py135recency_weight: float = 0.4 # 时间新鲜度deliberatebackend-docstringSimulation
1473backend/app/services/simulation_config_generator.py136popularity_weight: float = 0.3 # 热度deliberatebackend-docstringSimulation
1474backend/app/services/simulation_config_generator.py137relevance_weight: float = 0.3 # 相关性deliberatebackend-docstringSimulation
1475backend/app/services/simulation_config_generator.py139# 病毒传播阈值(达到多少互动后触发扩散)deliberatebackend-commentSimulation
1476backend/app/services/simulation_config_generator.py142# 回声室效应强度(相似观点聚集程度)deliberatebackend-commentSimulation
1477backend/app/services/simulation_config_generator.py148"""完整的模拟参数配置"""deliberatebackend-docstringSimulation
1478backend/app/services/simulation_config_generator.py149# 基础信息deliberatebackend-commentSimulation
1479backend/app/services/simulation_config_generator.py155# 时间配置deliberatebackend-commentSimulation
1480backend/app/services/simulation_config_generator.py158# Agent配置列表deliberatebackend-commentSimulation
1481backend/app/services/simulation_config_generator.py161# 事件配置deliberatebackend-commentSimulation
1482backend/app/services/simulation_config_generator.py164# 平台配置deliberatebackend-commentSimulation
1483backend/app/services/simulation_config_generator.py168# LLM配置deliberatebackend-commentSimulation
1484backend/app/services/simulation_config_generator.py172# 生成元数据deliberatebackend-commentSimulation
1485backend/app/services/simulation_config_generator.py174generation_reasoning: str = "" # LLM的推理说明gapbackend-prompt-labelSimulation
1486backend/app/services/simulation_config_generator.py177"""转换为字典"""deliberatebackend-docstringSimulation
1487backend/app/services/simulation_config_generator.py196"""转换为JSON字符串"""deliberatebackend-docstringSimulation
1488backend/app/services/simulation_config_generator.py202模拟配置智能生成器deliberatebackend-docstringSimulation
1489backend/app/services/simulation_config_generator.py204使用LLM分析模拟需求、文档内容、图谱实体信息deliberatebackend-docstringSimulation
1490backend/app/services/simulation_config_generator.py205自动生成最佳的模拟参数配置deliberatebackend-docstringSimulation
1491backend/app/services/simulation_config_generator.py207采用分步生成策略:deliberatebackend-docstringSimulation
1492backend/app/services/simulation_config_generator.py2081. 生成时间配置和事件配置(轻量级)deliberatebackend-docstringSimulation
1493backend/app/services/simulation_config_generator.py2092. 分批生成Agent配置每批10-20个deliberatebackend-docstringSimulation
1494backend/app/services/simulation_config_generator.py2103. 生成平台配置deliberatebackend-docstringSimulation
1495backend/app/services/simulation_config_generator.py213# 上下文最大字符数deliberatebackend-commentSimulation
1496backend/app/services/simulation_config_generator.py215# 每批生成的Agent数量deliberatebackend-commentSimulation
1497backend/app/services/simulation_config_generator.py218# 各步骤的上下文截断长度(字符数)deliberatebackend-commentSimulation
1498backend/app/services/simulation_config_generator.py219TIME_CONFIG_CONTEXT_LENGTH = 10000 # 时间配置deliberatebackend-docstringSimulation
1499backend/app/services/simulation_config_generator.py220EVENT_CONFIG_CONTEXT_LENGTH = 8000 # 事件配置deliberatebackend-docstringSimulation
1500backend/app/services/simulation_config_generator.py221ENTITY_SUMMARY_LENGTH = 300 # 实体摘要deliberatebackend-docstringSimulation
1501backend/app/services/simulation_config_generator.py222AGENT_SUMMARY_LENGTH = 300 # Agent配置中的实体摘要deliberatebackend-docstringSimulation
1502backend/app/services/simulation_config_generator.py223ENTITIES_PER_TYPE_DISPLAY = 20 # 每类实体显示数量deliberatebackend-docstringSimulation
1503backend/app/services/simulation_config_generator.py236raise ValueError("LLM_API_KEY 未配置")gapbackend-prompt-labelSimulation
1504backend/app/services/simulation_config_generator.py256智能生成完整的模拟配置(分步生成)deliberatebackend-docstringSimulation
1505backend/app/services/simulation_config_generator.py259simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1506backend/app/services/simulation_config_generator.py260project_id: 项目IDdeliberatebackend-docstringSimulation
1507backend/app/services/simulation_config_generator.py261graph_id: 图谱IDdeliberatebackend-docstringSimulation
1508backend/app/services/simulation_config_generator.py262simulation_requirement: 模拟需求描述deliberatebackend-docstringSimulation
1509backend/app/services/simulation_config_generator.py263document_text: 原始文档内容deliberatebackend-docstringSimulation
1510backend/app/services/simulation_config_generator.py264entities: 过滤后的实体列表deliberatebackend-docstringSimulation
1511backend/app/services/simulation_config_generator.py265enable_twitter: 是否启用Twitterdeliberatebackend-docstringSimulation
1512backend/app/services/simulation_config_generator.py266enable_reddit: 是否启用Redditdeliberatebackend-docstringSimulation
1513backend/app/services/simulation_config_generator.py267progress_callback: 进度回调函数(current_step, total_steps, message)deliberatebackend-docstringSimulation
1514backend/app/services/simulation_config_generator.py270SimulationParameters: 完整的模拟参数deliberatebackend-docstringSimulation
1515backend/app/services/simulation_config_generator.py274# 计算总步骤数deliberatebackend-commentSimulation
1516backend/app/services/simulation_config_generator.py276total_steps = 3 + num_batches # 时间配置 + 事件配置 + N批Agent + 平台配置deliberatebackend-docstringSimulation
1517backend/app/services/simulation_config_generator.py286# 1. 构建基础上下文信息deliberatebackend-commentSimulation
1518backend/app/services/simulation_config_generator.py295# ========== 步骤1: 生成时间配置 ==========deliberatebackend-commentSimulation
1519backend/app/services/simulation_config_generator.py302# ========== 步骤2: 生成事件配置 ==========deliberatebackend-commentSimulation
1520backend/app/services/simulation_config_generator.py308# ========== 步骤3-N: 分批生成Agent配置 ==========deliberatebackend-commentSimulation
1521backend/app/services/simulation_config_generator.py330# ========== 为初始帖子分配发布者 Agent ==========deliberatebackend-commentSimulation
1522backend/app/services/simulation_config_generator.py336# ========== 最后一步: 生成平台配置 ==========deliberatebackend-commentSimulation
1523backend/app/services/simulation_config_generator.py361# 构建最终参数deliberatebackend-commentSimulation
1524backend/app/services/simulation_config_generator.py387"""构建LLM上下文截断到最大长度"""deliberatebackend-docstringSimulation
1525backend/app/services/simulation_config_generator.py389# 实体摘要deliberatebackend-commentSimulation
1526backend/app/services/simulation_config_generator.py392# 构建上下文deliberatebackend-commentSimulation
1527backend/app/services/simulation_config_generator.py399remaining_length = self.MAX_CONTEXT_LENGTH - current_length - 500 # 留500字符余量deliberatebackend-docstringSimulation
1528backend/app/services/simulation_config_generator.py410"""生成实体摘要"""deliberatebackend-docstringSimulation
1529backend/app/services/simulation_config_generator.py413# 按类型分组deliberatebackend-commentSimulation
1530backend/app/services/simulation_config_generator.py423# 使用配置的显示数量和摘要长度deliberatebackend-commentSimulation
1531backend/app/services/simulation_config_generator.py435"""带重试的LLM调用包含JSON修复逻辑"""deliberatebackend-docstringSimulation
1532backend/app/services/simulation_config_generator.py450temperature=0.7 - (attempt * 0.1) # 每次重试降低温度deliberatebackend-docstringSimulation
1533backend/app/services/simulation_config_generator.py451# 不设置max_tokens让LLM自由发挥deliberatebackend-commentSimulation
1534backend/app/services/simulation_config_generator.py457# 检查是否被截断deliberatebackend-commentSimulation
1535backend/app/services/simulation_config_generator.py462# 尝试解析JSONdeliberatebackend-commentSimulation
1536backend/app/services/simulation_config_generator.py468# 尝试修复JSONdeliberatebackend-commentSimulation
1537backend/app/services/simulation_config_generator.py481raise last_error or Exception("LLM调用失败")gapbackend-prompt-labelSimulation
1538backend/app/services/simulation_config_generator.py484"""修复被截断的JSON"""deliberatebackend-docstringSimulation
1539backend/app/services/simulation_config_generator.py487# 计算未闭合的括号deliberatebackend-commentSimulation
1540backend/app/services/simulation_config_generator.py491# 检查是否有未闭合的字符串deliberatebackend-commentSimulation
1541backend/app/services/simulation_config_generator.py495# 闭合括号deliberatebackend-commentSimulation
1542backend/app/services/simulation_config_generator.py502"""尝试修复配置JSON"""deliberatebackend-docstringSimulation
1543backend/app/services/simulation_config_generator.py505# 修复被截断的情况deliberatebackend-commentSimulation
1544backend/app/services/simulation_config_generator.py508# 提取JSON部分deliberatebackend-commentSimulation
1545backend/app/services/simulation_config_generator.py513# 移除字符串中的换行符deliberatebackend-commentSimulation
1546backend/app/services/simulation_config_generator.py525# 尝试移除所有控制字符deliberatebackend-commentSimulation
1547backend/app/services/simulation_config_generator.py536"""生成时间配置"""deliberatebackend-docstringSimulation
1548backend/app/services/simulation_config_generator.py537# 使用配置的上下文截断长度deliberatebackend-commentSimulation
1549backend/app/services/simulation_config_generator.py540# 计算最大允许值80%的agent数deliberatebackend-commentSimulation
1550backend/app/services/simulation_config_generator.py598"""获取默认时间配置(中国人作息)"""deliberatebackend-docstringSimulation
1551backend/app/services/simulation_config_generator.py601"minutes_per_round": 60, # 每轮1小时加快时间流速gapbackend-prompt-labelSimulation
1552backend/app/services/simulation_config_generator.py612"""解析时间配置结果并验证agents_per_hour值不超过总agent数"""deliberatebackend-docstringSimulation
1553backend/app/services/simulation_config_generator.py613# 获取原始值deliberatebackend-commentSimulation
1554backend/app/services/simulation_config_generator.py617# 验证并修正确保不超过总agent数deliberatebackend-commentSimulation
1555backend/app/services/simulation_config_generator.py626# 确保 min < maxdeliberatebackend-commentSimulation
1556backend/app/services/simulation_config_generator.py633minutes_per_round=result.get("minutes_per_round", 60), # 默认每轮1小时gapbackend-prompt-labelSimulation
1557backend/app/services/simulation_config_generator.py638off_peak_activity_multiplier=0.05, # 凌晨几乎无人deliberatebackend-docstringSimulation
1558backend/app/services/simulation_config_generator.py652"""生成事件配置"""deliberatebackend-docstringSimulation
1559backend/app/services/simulation_config_generator.py654# 获取可用的实体类型列表,供 LLM 参考deliberatebackend-commentSimulation
1560backend/app/services/simulation_config_generator.py659# 为每种类型列出代表性实体名称deliberatebackend-commentSimulation
1561backend/app/services/simulation_config_generator.py673# 使用配置的上下文截断长度deliberatebackend-commentSimulation
1562backend/app/services/simulation_config_generator.py720"""解析事件配置结果"""deliberatebackend-docstringSimulation
1563backend/app/services/simulation_config_generator.py734为初始帖子分配合适的发布者 Agentdeliberatebackend-docstringSimulation
1564backend/app/services/simulation_config_generator.py736根据每个帖子的 poster_type 匹配最合适的 agent_iddeliberatebackend-docstringSimulation
1565backend/app/services/simulation_config_generator.py741# 按实体类型建立 agent 索引deliberatebackend-commentSimulation
1566backend/app/services/simulation_config_generator.py749# 类型映射表(处理 LLM 可能输出的不同格式)deliberatebackend-commentSimulation
1567backend/app/services/simulation_config_generator.py761# 记录每种类型已使用的 agent 索引,避免重复使用同一个 agentdeliberatebackend-commentSimulation
1568backend/app/services/simulation_config_generator.py769# 尝试找到匹配的 agentdeliberatebackend-commentSimulation
1569backend/app/services/simulation_config_generator.py772# 1. 直接匹配deliberatebackend-commentSimulation
1570backend/app/services/simulation_config_generator.py779# 2. 使用别名匹配deliberatebackend-commentSimulation
1571backend/app/services/simulation_config_generator.py792# 3. 如果仍未找到,使用影响力最高的 agentdeliberatebackend-commentSimulation
1572backend/app/services/simulation_config_generator.py796# 按影响力排序,选择影响力最高的deliberatebackend-commentSimulation
1573backend/app/services/simulation_config_generator.py820"""分批生成Agent配置"""deliberatebackend-docstringSimulation
1574backend/app/services/simulation_config_generator.py822# 构建实体信息(使用配置的摘要长度)deliberatebackend-commentSimulation
1575backend/app/services/simulation_config_generator.py879# 构建AgentActivityConfig对象deliberatebackend-commentSimulation
1576backend/app/services/simulation_config_generator.py885# 如果LLM没有生成使用规则生成deliberatebackend-commentSimulation
1577backend/app/services/simulation_config_generator.py909"""基于规则生成单个Agent配置中国人作息"""deliberatebackend-docstringSimulation
1578backend/app/services/simulation_config_generator.py913# 官方机构:工作时间活动,低频率,高影响力deliberatebackend-commentSimulation
1579backend/app/services/simulation_config_generator.py926# 媒体:全天活动,中等频率,高影响力deliberatebackend-commentSimulation
1580backend/app/services/simulation_config_generator.py939# 专家/教授:工作+晚间活动,中等频率deliberatebackend-commentSimulation
1581backend/app/services/simulation_config_generator.py952# 学生:晚间为主,高频率deliberatebackend-commentSimulation
1582backend/app/services/simulation_config_generator.py957"active_hours": [8, 9, 10, 11, 12, 13, 18, 19, 20, 21, 22, 23], # 上午+晚间gapbackend-prompt-labelSimulation
1583backend/app/services/simulation_config_generator.py965# 校友:晚间为主deliberatebackend-commentSimulation
1584backend/app/services/simulation_config_generator.py970"active_hours": [12, 13, 19, 20, 21, 22, 23], # 午休+晚间gapbackend-prompt-labelSimulation
1585backend/app/services/simulation_config_generator.py978# 普通人:晚间高峰deliberatebackend-commentSimulation
1586backend/app/services/simulation_config_generator.py983"active_hours": [9, 10, 11, 12, 13, 18, 19, 20, 21, 22, 23], # 白天+晚间gapbackend-prompt-labelSimulation
1587backend/app/services/simulation_ipc.py2模拟IPC通信模块deliberatebackend-docstringSimulation
1588backend/app/services/simulation_ipc.py3用于Flask后端和模拟脚本之间的进程间通信deliberatebackend-docstringSimulation
1589backend/app/services/simulation_ipc.py5通过文件系统实现简单的命令/响应模式:deliberatebackend-docstringSimulation
1590backend/app/services/simulation_ipc.py61. Flask写入命令到 commands/ 目录deliberatebackend-docstringSimulation
1591backend/app/services/simulation_ipc.py72. 模拟脚本轮询命令目录,执行命令并写入响应到 responses/ 目录deliberatebackend-docstringSimulation
1592backend/app/services/simulation_ipc.py83. Flask轮询响应目录获取结果deliberatebackend-docstringSimulation
1593backend/app/services/simulation_ipc.py27"""命令类型"""deliberatebackend-docstringSimulation
1594backend/app/services/simulation_ipc.py28INTERVIEW = "interview" # 单个Agent采访review-neededbackend-stringSimulation
1595backend/app/services/simulation_ipc.py29BATCH_INTERVIEW = "batch_interview" # 批量采访review-neededbackend-stringSimulation
1596backend/app/services/simulation_ipc.py30CLOSE_ENV = "close_env" # 关闭环境review-neededbackend-stringSimulation
1597backend/app/services/simulation_ipc.py34"""命令状态"""deliberatebackend-docstringSimulation
1598backend/app/services/simulation_ipc.py43"""IPC命令"""deliberatebackend-docstringSimulation
1599backend/app/services/simulation_ipc.py69"""IPC响应"""deliberatebackend-docstringSimulation
1600backend/app/services/simulation_ipc.py98模拟IPC客户端Flask端使用deliberatebackend-docstringSimulation
1601backend/app/services/simulation_ipc.py100用于向模拟进程发送命令并等待响应deliberatebackend-docstringSimulation
1602backend/app/services/simulation_ipc.py105初始化IPC客户端deliberatebackend-docstringSimulation
1603backend/app/services/simulation_ipc.py108simulation_dir: 模拟数据目录deliberatebackend-docstringSimulation
1604backend/app/services/simulation_ipc.py114# 确保目录存在deliberatebackend-commentSimulation
1605backend/app/services/simulation_ipc.py126发送命令并等待响应deliberatebackend-docstringSimulation
1606backend/app/services/simulation_ipc.py129command_type: 命令类型deliberatebackend-docstringSimulation
1607backend/app/services/simulation_ipc.py130args: 命令参数deliberatebackend-docstringSimulation
1608backend/app/services/simulation_ipc.py131timeout: 超时时间(秒)deliberatebackend-docstringSimulation
1609backend/app/services/simulation_ipc.py132poll_interval: 轮询间隔(秒)deliberatebackend-docstringSimulation
1610backend/app/services/simulation_ipc.py138TimeoutError: 等待响应超时deliberatebackend-docstringSimulation
1611backend/app/services/simulation_ipc.py147# 写入命令文件deliberatebackend-commentSimulation
1612backend/app/services/simulation_ipc.py154# 等待响应deliberatebackend-commentSimulation
1613backend/app/services/simulation_ipc.py165# 清理命令和响应文件deliberatebackend-commentSimulation
1614backend/app/services/simulation_ipc.py179# 超时deliberatebackend-commentSimulation
1615backend/app/services/simulation_ipc.py182# 清理命令文件deliberatebackend-commentSimulation
1616backend/app/services/simulation_ipc.py188raise TimeoutError(f"等待命令响应超时 ({timeout}秒)")review-neededbackend-stringSimulation
1617backend/app/services/simulation_ipc.py198发送单个Agent采访命令deliberatebackend-docstringSimulation
1618backend/app/services/simulation_ipc.py202prompt: 采访问题deliberatebackend-docstringSimulation
1619backend/app/services/simulation_ipc.py203platform: 指定平台(可选)deliberatebackend-docstringSimulation
1620backend/app/services/simulation_ipc.py204- "twitter": 只采访Twitter平台review-neededbackend-stringSimulation
1621backend/app/services/simulation_ipc.py205- "reddit": 只采访Reddit平台review-neededbackend-stringSimulation
1622backend/app/services/simulation_ipc.py206- None: 双平台模拟时同时采访两个平台,单平台模拟时采访该平台deliberatebackend-docstringSimulation
1623backend/app/services/simulation_ipc.py207timeout: 超时时间deliberatebackend-docstringSimulation
1624backend/app/services/simulation_ipc.py210IPCResponseresult字段包含采访结果deliberatebackend-docstringSimulation
1625backend/app/services/simulation_ipc.py232发送批量采访命令deliberatebackend-docstringSimulation
1626backend/app/services/simulation_ipc.py235interviews: 采访列表,每个元素包含 {"agent_id": int, "prompt": str, "platform": str(可选)}review-neededbackend-stringSimulation
1627backend/app/services/simulation_ipc.py236platform: 默认平台可选会被每个采访项的platform覆盖deliberatebackend-docstringSimulation
1628backend/app/services/simulation_ipc.py237- "twitter": 默认只采访Twitter平台review-neededbackend-stringSimulation
1629backend/app/services/simulation_ipc.py238- "reddit": 默认只采访Reddit平台review-neededbackend-stringSimulation
1630backend/app/services/simulation_ipc.py239- None: 双平台模拟时每个Agent同时采访两个平台deliberatebackend-docstringSimulation
1631backend/app/services/simulation_ipc.py240timeout: 超时时间deliberatebackend-docstringSimulation
1632backend/app/services/simulation_ipc.py243IPCResponseresult字段包含所有采访结果deliberatebackend-docstringSimulation
1633backend/app/services/simulation_ipc.py257发送关闭环境命令deliberatebackend-docstringSimulation
1634backend/app/services/simulation_ipc.py260timeout: 超时时间deliberatebackend-docstringSimulation
1635backend/app/services/simulation_ipc.py273检查模拟环境是否存活deliberatebackend-docstringSimulation
1636backend/app/services/simulation_ipc.py275通过检查 env_status.json 文件来判断deliberatebackend-docstringSimulation
1637backend/app/services/simulation_ipc.py291模拟IPC服务器模拟脚本端使用deliberatebackend-docstringSimulation
1638backend/app/services/simulation_ipc.py293轮询命令目录,执行命令并返回响应deliberatebackend-docstringSimulation
1639backend/app/services/simulation_ipc.py298初始化IPC服务器deliberatebackend-docstringSimulation
1640backend/app/services/simulation_ipc.py301simulation_dir: 模拟数据目录deliberatebackend-docstringSimulation
1641backend/app/services/simulation_ipc.py307# 确保目录存在deliberatebackend-commentSimulation
1642backend/app/services/simulation_ipc.py311# 环境状态deliberatebackend-commentSimulation
1643backend/app/services/simulation_ipc.py315"""标记服务器为运行状态"""deliberatebackend-docstringSimulation
1644backend/app/services/simulation_ipc.py320"""标记服务器为停止状态"""deliberatebackend-docstringSimulation
1645backend/app/services/simulation_ipc.py325"""更新环境状态文件"""deliberatebackend-docstringSimulation
1646backend/app/services/simulation_ipc.py335轮询命令目录,返回第一个待处理的命令deliberatebackend-docstringSimulation
1647backend/app/services/simulation_ipc.py338IPCCommand 或 Nonedeliberatebackend-docstringSimulation
1648backend/app/services/simulation_ipc.py343# 按时间排序获取命令文件deliberatebackend-commentSimulation
1649backend/app/services/simulation_ipc.py365发送响应deliberatebackend-docstringSimulation
1650backend/app/services/simulation_ipc.py368response: IPC响应deliberatebackend-docstringSimulation
1651backend/app/services/simulation_ipc.py374# 删除命令文件deliberatebackend-commentSimulation
1652backend/app/services/simulation_ipc.py382"""发送成功响应"""deliberatebackend-docstringSimulation
1653backend/app/services/simulation_ipc.py390"""发送错误响应"""deliberatebackend-docstringSimulation
1654backend/app/services/simulation_manager.py2OASIS模拟管理器deliberatebackend-docstringSimulation
1655backend/app/services/simulation_manager.py3管理Twitter和Reddit双平台并行模拟deliberatebackend-docstringSimulation
1656backend/app/services/simulation_manager.py4使用预设脚本 + LLM智能生成配置参数deliberatebackend-docstringSimulation
1657backend/app/services/simulation_manager.py26"""模拟状态"""deliberatebackend-docstringSimulation
1658backend/app/services/simulation_manager.py32STOPPED = "stopped" # 模拟被手动停止review-neededbackend-stringSimulation
1659backend/app/services/simulation_manager.py33COMPLETED = "completed" # 模拟自然完成review-neededbackend-stringSimulation
1660backend/app/services/simulation_manager.py38"""平台类型"""deliberatebackend-docstringSimulation
1661backend/app/services/simulation_manager.py45"""模拟状态"""deliberatebackend-docstringSimulation
1662backend/app/services/simulation_manager.py50# 平台启用状态deliberatebackend-commentSimulation
1663backend/app/services/simulation_manager.py54# 状态deliberatebackend-commentSimulation
1664backend/app/services/simulation_manager.py57# 准备阶段数据deliberatebackend-commentSimulation
1665backend/app/services/simulation_manager.py62# 配置生成信息deliberatebackend-commentSimulation
1666backend/app/services/simulation_manager.py66# 运行时数据deliberatebackend-commentSimulation
1667backend/app/services/simulation_manager.py71# 时间戳deliberatebackend-commentSimulation
1668backend/app/services/simulation_manager.py75# 错误信息deliberatebackend-commentSimulation
1669backend/app/services/simulation_manager.py79"""完整状态字典(内部使用)"""deliberatebackend-docstringSimulation
1670backend/app/services/simulation_manager.py101"""简化状态字典API返回使用"""deliberatebackend-docstringSimulation
1671backend/app/services/simulation_manager.py117模拟管理器deliberatebackend-docstringSimulation
1672backend/app/services/simulation_manager.py119核心功能:deliberatebackend-docstringSimulation
1673backend/app/services/simulation_manager.py1201. 从Zep图谱读取实体并过滤deliberatebackend-docstringSimulation
1674backend/app/services/simulation_manager.py1212. 生成OASIS Agent Profiledeliberatebackend-docstringSimulation
1675backend/app/services/simulation_manager.py1223. 使用LLM智能生成模拟配置参数deliberatebackend-docstringSimulation
1676backend/app/services/simulation_manager.py1234. 准备预设脚本所需的所有文件deliberatebackend-docstringSimulation
1677backend/app/services/simulation_manager.py126# 模拟数据存储目录deliberatebackend-commentSimulation
1678backend/app/services/simulation_manager.py133# 确保目录存在deliberatebackend-commentSimulation
1679backend/app/services/simulation_manager.py136# 内存中的模拟状态缓存deliberatebackend-commentSimulation
1680backend/app/services/simulation_manager.py140"""获取模拟数据目录"""deliberatebackend-docstringSimulation
1681backend/app/services/simulation_manager.py146"""保存模拟状态到文件"""deliberatebackend-docstringSimulation
1682backend/app/services/simulation_manager.py158"""从文件加载模拟状态"""deliberatebackend-docstringSimulation
1683backend/app/services/simulation_manager.py202创建新的模拟deliberatebackend-docstringSimulation
1684backend/app/services/simulation_manager.py205project_id: 项目IDdeliberatebackend-docstringSimulation
1685backend/app/services/simulation_manager.py206graph_id: Zep图谱IDdeliberatebackend-docstringSimulation
1686backend/app/services/simulation_manager.py207enable_twitter: 是否启用Twitter模拟deliberatebackend-docstringSimulation
1687backend/app/services/simulation_manager.py208enable_reddit: 是否启用Reddit模拟deliberatebackend-docstringSimulation
1688backend/app/services/simulation_manager.py241准备模拟环境(全程自动化)deliberatebackend-docstringSimulation
1689backend/app/services/simulation_manager.py243步骤:deliberatebackend-docstringSimulation
1690backend/app/services/simulation_manager.py2441. 从Zep图谱读取并过滤实体deliberatebackend-docstringSimulation
1691backend/app/services/simulation_manager.py2452. 为每个实体生成OASIS Agent Profile可选LLM增强支持并行deliberatebackend-docstringSimulation
1692backend/app/services/simulation_manager.py2463. 使用LLM智能生成模拟配置参数时间、活跃度、发言频率等deliberatebackend-docstringSimulation
1693backend/app/services/simulation_manager.py2474. 保存配置文件和Profile文件deliberatebackend-docstringSimulation
1694backend/app/services/simulation_manager.py2485. 复制预设脚本到模拟目录deliberatebackend-docstringSimulation
1695backend/app/services/simulation_manager.py251simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1696backend/app/services/simulation_manager.py252simulation_requirement: 模拟需求描述用于LLM生成配置deliberatebackend-docstringSimulation
1697backend/app/services/simulation_manager.py253document_text: 原始文档内容用于LLM理解背景deliberatebackend-docstringSimulation
1698backend/app/services/simulation_manager.py254defined_entity_types: 预定义的实体类型(可选)deliberatebackend-docstringSimulation
1699backend/app/services/simulation_manager.py255use_llm_for_profiles: 是否使用LLM生成详细人设deliberatebackend-docstringSimulation
1700backend/app/services/simulation_manager.py256progress_callback: 进度回调函数 (stage, progress, message)deliberatebackend-docstringSimulation
1701backend/app/services/simulation_manager.py257parallel_profile_count: 并行生成人设的数量默认3deliberatebackend-docstringSimulation
1702backend/app/services/simulation_manager.py264raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
1703backend/app/services/simulation_manager.py272# ========== 阶段1: 读取并过滤实体 ==========deliberatebackend-commentSimulation
1704backend/app/services/simulation_manager.py300state.error = "没有找到符合条件的实体,请检查图谱是否正确构建"review-neededbackend-stringSimulation
1705backend/app/services/simulation_manager.py304# ========== 阶段2: 生成Agent Profile ==========deliberatebackend-commentSimulation
1706backend/app/services/simulation_manager.py315# 传入graph_id以启用Zep检索功能获取更丰富的上下文deliberatebackend-commentSimulation
1707backend/app/services/simulation_manager.py329# 设置实时保存的文件路径(优先使用 Reddit JSON 格式)deliberatebackend-commentSimulation
1708backend/app/services/simulation_manager.py343graph_id=state.graph_id, # 传入graph_id用于Zep检索deliberatebackend-docstringSimulation
1709backend/app/services/simulation_manager.py344parallel_count=parallel_profile_count, # 并行生成数量deliberatebackend-docstringSimulation
1710backend/app/services/simulation_manager.py345realtime_output_path=realtime_output_path, # 实时保存路径deliberatebackend-docstringSimulation
1711backend/app/services/simulation_manager.py346output_platform=realtime_platform # 输出格式deliberatebackend-docstringSimulation
1712backend/app/services/simulation_manager.py351# 保存Profile文件注意Twitter使用CSV格式Reddit使用JSON格式deliberatebackend-commentSimulation
1713backend/app/services/simulation_manager.py352# Reddit 已经在生成过程中实时保存了,这里再保存一次确保完整性deliberatebackend-commentSimulation
1714backend/app/services/simulation_manager.py369# Twitter使用CSV格式这是OASIS的要求deliberatebackend-commentSimulation
1715backend/app/services/simulation_manager.py384# ========== 阶段3: LLM智能生成模拟配置 ==========deliberatebackend-commentSimulation
1716backend/app/services/simulation_manager.py422# 保存配置文件deliberatebackend-commentSimulation
1717backend/app/services/simulation_manager.py438# 注意:运行脚本保留在 backend/scripts/ 目录,不再复制到模拟目录deliberatebackend-commentSimulation
1718backend/app/services/simulation_manager.py439# 启动模拟时simulation_runner 会从 scripts/ 目录运行脚本deliberatebackend-commentSimulation
1719backend/app/services/simulation_manager.py441# 更新状态deliberatebackend-commentSimulation
1720backend/app/services/simulation_manager.py459"""获取模拟状态"""deliberatebackend-docstringSimulation
1721backend/app/services/simulation_manager.py463"""列出所有模拟"""deliberatebackend-docstringSimulation
1722backend/app/services/simulation_manager.py468# 跳过隐藏文件(如 .DS_Store和非目录文件deliberatebackend-commentSimulation
1723backend/app/services/simulation_manager.py481"""获取模拟的Agent Profile"""deliberatebackend-docstringSimulation
1724backend/app/services/simulation_manager.py484raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
1725backend/app/services/simulation_manager.py496"""获取模拟配置"""deliberatebackend-docstringSimulation
1726backend/app/services/simulation_manager.py507"""获取运行说明"""deliberatebackend-docstringSimulation
1727backend/app/services/simulation_manager.py522f"1. 激活conda环境: conda activate MiroFish\n"review-neededbackend-stringSimulation
1728backend/app/services/simulation_manager.py523f"2. 运行模拟 (脚本位于 {scripts_dir}):\n"review-neededbackend-stringSimulation
1729backend/app/services/simulation_manager.py524f" - 单独运行Twitter: python {scripts_dir}/run_twitter_simulation.py --config {config_path}\n"review-neededbackend-stringSimulation
1730backend/app/services/simulation_manager.py525f" - 单独运行Reddit: python {scripts_dir}/run_reddit_simulation.py --config {config_path}\n"review-neededbackend-stringSimulation
1731backend/app/services/simulation_manager.py526f" - 并行运行双平台: python {scripts_dir}/run_parallel_simulation.py --config {config_path}"review-neededbackend-stringSimulation
1732backend/app/services/simulation_runner.py2OASIS模拟运行器deliberatebackend-docstringSimulation
1733backend/app/services/simulation_runner.py3在后台运行模拟并记录每个Agent的动作支持实时状态监控deliberatebackend-docstringSimulation
1734backend/app/services/simulation_runner.py29# 标记是否已注册清理函数deliberatebackend-commentSimulation
1735backend/app/services/simulation_runner.py32# 平台检测deliberatebackend-commentSimulation
1736backend/app/services/simulation_runner.py37"""运行器状态"""deliberatebackend-docstringSimulation
1737backend/app/services/simulation_runner.py50"""Agent动作记录"""deliberatebackend-docstringSimulation
1738backend/app/services/simulation_runner.py77"""每轮摘要"""deliberatebackend-docstringSimulation
1739backend/app/services/simulation_runner.py103"""模拟运行状态(实时)"""deliberatebackend-docstringSimulation
1740backend/app/services/simulation_runner.py107# 进度信息deliberatebackend-commentSimulation
1741backend/app/services/simulation_runner.py113# 各平台独立轮次和模拟时间(用于双平台并行显示)deliberatebackend-commentSimulation
1742backend/app/services/simulation_runner.py119# 平台状态deliberatebackend-commentSimulation
1743backend/app/services/simulation_runner.py125# 平台完成状态(通过检测 actions.jsonl 中的 simulation_end 事件)deliberatebackend-commentSimulation
1744backend/app/services/simulation_runner.py129# 每轮摘要deliberatebackend-commentSimulation
1745backend/app/services/simulation_runner.py132# 最近动作(用于前端实时展示)deliberatebackend-commentSimulation
1746backend/app/services/simulation_runner.py136# 时间戳deliberatebackend-commentSimulation
1747backend/app/services/simulation_runner.py141# 错误信息deliberatebackend-commentSimulation
1748backend/app/services/simulation_runner.py144# 进程ID用于停止deliberatebackend-commentSimulation
1749backend/app/services/simulation_runner.py148"""添加动作到最近动作列表"""deliberatebackend-docstringSimulation
1750backend/app/services/simulation_runner.py169# 各平台独立轮次和时间deliberatebackend-commentSimulation
1751backend/app/services/simulation_runner.py189"""包含最近动作的详细信息"""deliberatebackend-docstringSimulation
1752backend/app/services/simulation_runner.py198模拟运行器deliberatebackend-docstringSimulation
1753backend/app/services/simulation_runner.py200负责:deliberatebackend-docstringSimulation
1754backend/app/services/simulation_runner.py2011. 在后台进程中运行OASIS模拟deliberatebackend-docstringSimulation
1755backend/app/services/simulation_runner.py2022. 解析运行日志记录每个Agent的动作deliberatebackend-docstringSimulation
1756backend/app/services/simulation_runner.py2033. 提供实时状态查询接口deliberatebackend-docstringSimulation
1757backend/app/services/simulation_runner.py2044. 支持暂停/停止/恢复操作deliberatebackend-docstringSimulation
1758backend/app/services/simulation_runner.py207# 运行状态存储目录deliberatebackend-commentSimulation
1759backend/app/services/simulation_runner.py213# 脚本目录deliberatebackend-commentSimulation
1760backend/app/services/simulation_runner.py219# 内存中的运行状态deliberatebackend-commentSimulation
1761backend/app/services/simulation_runner.py224_stdout_files: Dict[str, Any] = {} # 存储 stdout 文件句柄deliberatebackend-docstringSimulation
1762backend/app/services/simulation_runner.py225_stderr_files: Dict[str, Any] = {} # 存储 stderr 文件句柄deliberatebackend-docstringSimulation
1763backend/app/services/simulation_runner.py227# 图谱记忆更新配置deliberatebackend-commentSimulation
1764backend/app/services/simulation_runner.py232"""获取运行状态"""deliberatebackend-docstringSimulation
1765backend/app/services/simulation_runner.py236# 尝试从文件加载deliberatebackend-commentSimulation
1766backend/app/services/simulation_runner.py244"""从文件加载运行状态"""deliberatebackend-docstringSimulation
1767backend/app/services/simulation_runner.py260# 各平台独立轮次和时间deliberatebackend-commentSimulation
1768backend/app/services/simulation_runner.py278# 加载最近动作deliberatebackend-commentSimulation
1769backend/app/services/simulation_runner.py300"""保存运行状态到文件"""deliberatebackend-docstringSimulation
1770backend/app/services/simulation_runner.py317max_rounds: int = None, # 最大模拟轮数(可选,用于截断过长的模拟)deliberatebackend-docstringSimulation
1771backend/app/services/simulation_runner.py318enable_graph_memory_update: bool = False, # 是否将活动更新到Zep图谱deliberatebackend-docstringSimulation
1772backend/app/services/simulation_runner.py319graph_id: str = None # Zep图谱ID启用图谱更新时必需deliberatebackend-docstringSimulation
1773backend/app/services/simulation_runner.py322启动模拟deliberatebackend-docstringSimulation
1774backend/app/services/simulation_runner.py325simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1775backend/app/services/simulation_runner.py326platform: 运行平台 (twitter/reddit/parallel)deliberatebackend-docstringSimulation
1776backend/app/services/simulation_runner.py327max_rounds: 最大模拟轮数(可选,用于截断过长的模拟)deliberatebackend-docstringSimulation
1777backend/app/services/simulation_runner.py328enable_graph_memory_update: 是否将Agent活动动态更新到Zep图谱deliberatebackend-docstringSimulation
1778backend/app/services/simulation_runner.py329graph_id: Zep图谱ID启用图谱更新时必需deliberatebackend-docstringSimulation
1779backend/app/services/simulation_runner.py334# 检查是否已在运行deliberatebackend-commentSimulation
1780backend/app/services/simulation_runner.py337raise ValueError(f"模拟已在运行中: {simulation_id}")review-neededbackend-stringSimulation
1781backend/app/services/simulation_runner.py339# 加载模拟配置deliberatebackend-commentSimulation
1782backend/app/services/simulation_runner.py344raise ValueError(f"模拟配置不存在,请先调用 /prepare 接口")review-neededbackend-stringSimulation
1783backend/app/services/simulation_runner.py349# 初始化运行状态deliberatebackend-commentSimulation
1784backend/app/services/simulation_runner.py355# 如果指定了最大轮数,则截断deliberatebackend-commentSimulation
1785backend/app/services/simulation_runner.py372# 如果启用图谱记忆更新,创建更新器deliberatebackend-commentSimulation
1786backend/app/services/simulation_runner.py375raise ValueError("启用图谱记忆更新时必须提供 graph_id")review-neededbackend-stringSimulation
1787backend/app/services/simulation_runner.py387# 确定运行哪个脚本(脚本位于 backend/scripts/ 目录)deliberatebackend-commentSimulation
1788backend/app/services/simulation_runner.py402raise ValueError(f"脚本不存在: {script_path}")review-neededbackend-stringSimulation
1789backend/app/services/simulation_runner.py404# 创建动作队列deliberatebackend-commentSimulation
1790backend/app/services/simulation_runner.py408# 启动模拟进程deliberatebackend-commentSimulation
1791backend/app/services/simulation_runner.py410# 构建运行命令,使用完整路径deliberatebackend-commentSimulation
1792backend/app/services/simulation_runner.py411# 新的日志结构:deliberatebackend-commentSimulation
1793backend/app/services/simulation_runner.py412# twitter/actions.jsonl - Twitter 动作日志deliberatebackend-commentSimulation
1794backend/app/services/simulation_runner.py413# reddit/actions.jsonl - Reddit 动作日志deliberatebackend-commentSimulation
1795backend/app/services/simulation_runner.py414# simulation.log - 主进程日志deliberatebackend-commentSimulation
1796backend/app/services/simulation_runner.py417sys.executable, # Python解释器deliberatebackend-docstringSimulation
1797backend/app/services/simulation_runner.py419"--config", config_path, # 使用完整配置文件路径review-neededbackend-stringSimulation
1798backend/app/services/simulation_runner.py422# 如果指定了最大轮数,添加到命令行参数deliberatebackend-commentSimulation
1799backend/app/services/simulation_runner.py426# 创建主日志文件,避免 stdout/stderr 管道缓冲区满导致进程阻塞deliberatebackend-commentSimulation
1800backend/app/services/simulation_runner.py430# 设置子进程环境变量,确保 Windows 上使用 UTF-8 编码deliberatebackend-commentSimulation
1801backend/app/services/simulation_runner.py431# 这可以修复第三方库(如 OASIS读取文件时未指定编码的问题deliberatebackend-commentSimulation
1802backend/app/services/simulation_runner.py433env['PYTHONUTF8'] = '1' # Python 3.7+ 支持,让所有 open() 默认使用 UTF-8review-neededbackend-stringSimulation
1803backend/app/services/simulation_runner.py434env['PYTHONIOENCODING'] = 'utf-8' # 确保 stdout/stderr 使用 UTF-8review-neededbackend-stringSimulation
1804backend/app/services/simulation_runner.py436# 设置工作目录为模拟目录(数据库等文件会生成在此)deliberatebackend-commentSimulation
1805backend/app/services/simulation_runner.py437# 使用 start_new_session=True 创建新的进程组,确保可以通过 os.killpg 终止所有子进程deliberatebackend-commentSimulation
1806backend/app/services/simulation_runner.py442stderr=subprocess.STDOUT, # stderr 也写入同一个文件deliberatebackend-docstringSimulation
1807backend/app/services/simulation_runner.py444encoding='utf-8', # 显式指定编码review-neededbackend-stringSimulation
1808backend/app/services/simulation_runner.py446env=env, # 传递带有 UTF-8 设置的环境变量deliberatebackend-docstringSimulation
1809backend/app/services/simulation_runner.py447start_new_session=True, # 创建新进程组,确保服务器关闭时能终止所有相关进程deliberatebackend-docstringSimulation
1810backend/app/services/simulation_runner.py450# 保存文件句柄以便后续关闭deliberatebackend-commentSimulation
1811backend/app/services/simulation_runner.py452cls._stderr_files[simulation_id] = None # 不再需要单独的 stderrdeliberatebackend-docstringSimulation
1812backend/app/services/simulation_runner.py462# 启动监控线程deliberatebackend-commentSimulation
1813backend/app/services/simulation_runner.py483"""监控模拟进程,解析动作日志"""deliberatebackend-docstringSimulation
1814backend/app/services/simulation_runner.py487# 新的日志结构:分平台的动作日志deliberatebackend-commentSimulation
1815backend/app/services/simulation_runner.py501while process.poll() is None: # 进程仍在运行deliberatebackend-docstringSimulation
1816backend/app/services/simulation_runner.py502# 读取 Twitter 动作日志deliberatebackend-commentSimulation
1817backend/app/services/simulation_runner.py508# 读取 Reddit 动作日志deliberatebackend-commentSimulation
1818backend/app/services/simulation_runner.py514# 更新状态deliberatebackend-commentSimulation
1819backend/app/services/simulation_runner.py518# 进程结束后,最后读取一次日志deliberatebackend-commentSimulation
1820backend/app/services/simulation_runner.py524# 进程结束deliberatebackend-commentSimulation
1821backend/app/services/simulation_runner.py533# 从主日志文件读取错误信息deliberatebackend-commentSimulation
1822backend/app/services/simulation_runner.py539error_info = f.read()[-2000:] # 取最后2000字符deliberatebackend-docstringSimulation
1823backend/app/services/simulation_runner.py542state.error = f"进程退出码: {exit_code}, 错误: {error_info}"review-neededbackend-stringSimulation
1824backend/app/services/simulation_runner.py556# 停止图谱记忆更新器deliberatebackend-commentSimulation
1825backend/app/services/simulation_runner.py565# 清理进程资源deliberatebackend-commentSimulation
1826backend/app/services/simulation_runner.py569# 关闭日志文件句柄deliberatebackend-commentSimulation
1827backend/app/services/simulation_runner.py592读取动作日志文件deliberatebackend-docstringSimulation
1828backend/app/services/simulation_runner.py595log_path: 日志文件路径deliberatebackend-docstringSimulation
1829backend/app/services/simulation_runner.py596position: 上次读取位置deliberatebackend-docstringSimulation
1830backend/app/services/simulation_runner.py597state: 运行状态对象deliberatebackend-docstringSimulation
1831backend/app/services/simulation_runner.py598platform: 平台名称 (twitter/reddit)deliberatebackend-docstringSimulation
1832backend/app/services/simulation_runner.py601新的读取位置deliberatebackend-docstringSimulation
1833backend/app/services/simulation_runner.py603# 检查是否启用了图谱记忆更新deliberatebackend-commentSimulation
1834backend/app/services/simulation_runner.py618# 处理事件类型的条目deliberatebackend-commentSimulation
1835backend/app/services/simulation_runner.py622# 检测 simulation_end 事件,标记平台已完成deliberatebackend-commentSimulation
1836backend/app/services/simulation_runner.py633# 检查是否所有启用的平台都已完成deliberatebackend-commentSimulation
1837backend/app/services/simulation_runner.py634# 如果只运行了一个平台,只检查那个平台deliberatebackend-commentSimulation
1838backend/app/services/simulation_runner.py635# 如果运行了两个平台,需要两个都完成deliberatebackend-commentSimulation
1839backend/app/services/simulation_runner.py642# 更新轮次信息(从 round_end 事件)deliberatebackend-commentSimulation
1840backend/app/services/simulation_runner.py647# 更新各平台独立的轮次和时间deliberatebackend-commentSimulation
1841backend/app/services/simulation_runner.py657# 总体轮次取两个平台的最大值deliberatebackend-commentSimulation
1842backend/app/services/simulation_runner.py660# 总体时间取两个平台的最大值deliberatebackend-commentSimulation
1843backend/app/services/simulation_runner.py678# 更新轮次deliberatebackend-commentSimulation
1844backend/app/services/simulation_runner.py682# 如果启用了图谱记忆更新将活动发送到Zepdeliberatebackend-commentSimulation
1845backend/app/services/simulation_runner.py696检查所有启用的平台是否都已完成模拟deliberatebackend-docstringSimulation
1846backend/app/services/simulation_runner.py698通过检查对应的 actions.jsonl 文件是否存在来判断平台是否被启用deliberatebackend-docstringSimulation
1847backend/app/services/simulation_runner.py701True 如果所有启用的平台都已完成deliberatebackend-docstringSimulation
1848backend/app/services/simulation_runner.py707# 检查哪些平台被启用(通过文件是否存在判断)deliberatebackend-commentSimulation
1849backend/app/services/simulation_runner.py711# 如果平台被启用但未完成,则返回 Falsedeliberatebackend-commentSimulation
1850backend/app/services/simulation_runner.py717# 至少有一个平台被启用且已完成deliberatebackend-commentSimulation
1851backend/app/services/simulation_runner.py723跨平台终止进程及其子进程deliberatebackend-docstringSimulation
1852backend/app/services/simulation_runner.py726process: 要终止的进程deliberatebackend-docstringSimulation
1853backend/app/services/simulation_runner.py727simulation_id: 模拟ID用于日志deliberatebackend-docstringSimulation
1854backend/app/services/simulation_runner.py728timeout: 等待进程退出的超时时间(秒)deliberatebackend-docstringSimulation
1855backend/app/services/simulation_runner.py731# Windows: 使用 taskkill 命令终止进程树deliberatebackend-commentSimulation
1856backend/app/services/simulation_runner.py732# /F = 强制终止, /T = 终止进程树(包括子进程)deliberatebackend-commentSimulation
1857backend/app/services/simulation_runner.py735# 先尝试优雅终止deliberatebackend-commentSimulation
1858backend/app/services/simulation_runner.py744# 强制终止deliberatebackend-commentSimulation
1859backend/app/services/simulation_runner.py760# Unix: 使用进程组终止deliberatebackend-commentSimulation
1860backend/app/services/simulation_runner.py761# 由于使用了 start_new_session=True进程组 ID 等于主进程 PIDdeliberatebackend-commentSimulation
1861backend/app/services/simulation_runner.py765# 先发送 SIGTERM 给整个进程组deliberatebackend-commentSimulation
1862backend/app/services/simulation_runner.py771# 如果超时后还没结束,强制发送 SIGKILLdeliberatebackend-commentSimulation
1863backend/app/services/simulation_runner.py778"""停止模拟"""deliberatebackend-docstringSimulation
1864backend/app/services/simulation_runner.py781raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
1865backend/app/services/simulation_runner.py784raise ValueError(f"模拟未在运行: {simulation_id}, status={state.runner_status}")review-neededbackend-stringSimulation
1866backend/app/services/simulation_runner.py789# 终止进程deliberatebackend-commentSimulation
1867backend/app/services/simulation_runner.py795# 进程已经不存在deliberatebackend-commentSimulation
1868backend/app/services/simulation_runner.py799# 回退到直接终止进程deliberatebackend-commentSimulation
1869backend/app/services/simulation_runner.py812# 停止图谱记忆更新器deliberatebackend-commentSimulation
1870backend/app/services/simulation_runner.py834从单个动作文件中读取动作deliberatebackend-docstringSimulation
1871backend/app/services/simulation_runner.py837file_path: 动作日志文件路径deliberatebackend-docstringSimulation
1872backend/app/services/simulation_runner.py838default_platform: 默认平台(当动作记录中没有 platform 字段时使用)deliberatebackend-docstringSimulation
1873backend/app/services/simulation_runner.py839platform_filter: 过滤平台deliberatebackend-docstringSimulation
1874backend/app/services/simulation_runner.py840agent_id: 过滤 Agent IDdeliberatebackend-docstringSimulation
1875backend/app/services/simulation_runner.py841round_num: 过滤轮次deliberatebackend-docstringSimulation
1876backend/app/services/simulation_runner.py857# 跳过非动作记录(如 simulation_start, round_start, round_end 等事件)deliberatebackend-commentSimulation
1877backend/app/services/simulation_runner.py861# 跳过没有 agent_id 的记录(非 Agent 动作)deliberatebackend-commentSimulation
1878backend/app/services/simulation_runner.py865# 获取平台:优先使用记录中的 platform否则使用默认平台deliberatebackend-commentSimulation
1879backend/app/services/simulation_runner.py868# 过滤deliberatebackend-commentSimulation
1880backend/app/services/simulation_runner.py902获取所有平台的完整动作历史(无分页限制)deliberatebackend-docstringSimulation
1881backend/app/services/simulation_runner.py905simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1882backend/app/services/simulation_runner.py906platform: 过滤平台twitter/redditdeliberatebackend-docstringSimulation
1883backend/app/services/simulation_runner.py907agent_id: 过滤Agentdeliberatebackend-docstringSimulation
1884backend/app/services/simulation_runner.py908round_num: 过滤轮次deliberatebackend-docstringSimulation
1885backend/app/services/simulation_runner.py911完整的动作列表(按时间戳排序,新的在前)deliberatebackend-docstringSimulation
1886backend/app/services/simulation_runner.py916# 读取 Twitter 动作文件(根据文件路径自动设置 platform 为 twitterdeliberatebackend-commentSimulation
1887backend/app/services/simulation_runner.py921default_platform="twitter", # 自动填充 platform 字段review-neededbackend-stringSimulation
1888backend/app/services/simulation_runner.py927# 读取 Reddit 动作文件(根据文件路径自动设置 platform 为 redditdeliberatebackend-commentSimulation
1889backend/app/services/simulation_runner.py932default_platform="reddit", # 自动填充 platform 字段review-neededbackend-stringSimulation
1890backend/app/services/simulation_runner.py938# 如果分平台文件不存在,尝试读取旧的单一文件格式deliberatebackend-commentSimulation
1891backend/app/services/simulation_runner.py943default_platform=None, # 旧格式文件中应该有 platform 字段deliberatebackend-docstringSimulation
1892backend/app/services/simulation_runner.py949# 按时间戳排序(新的在前)deliberatebackend-commentSimulation
1893backend/app/services/simulation_runner.py965获取动作历史(带分页)deliberatebackend-docstringSimulation
1894backend/app/services/simulation_runner.py968simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1895backend/app/services/simulation_runner.py969limit: 返回数量限制deliberatebackend-docstringSimulation
1896backend/app/services/simulation_runner.py970offset: 偏移量deliberatebackend-docstringSimulation
1897backend/app/services/simulation_runner.py971platform: 过滤平台deliberatebackend-docstringSimulation
1898backend/app/services/simulation_runner.py972agent_id: 过滤Agentdeliberatebackend-docstringSimulation
1899backend/app/services/simulation_runner.py973round_num: 过滤轮次deliberatebackend-docstringSimulation
1900backend/app/services/simulation_runner.py976动作列表deliberatebackend-docstringSimulation
1901backend/app/services/simulation_runner.py985# 分页deliberatebackend-commentSimulation
1902backend/app/services/simulation_runner.py996获取模拟时间线(按轮次汇总)deliberatebackend-docstringSimulation
1903backend/app/services/simulation_runner.py999simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1904backend/app/services/simulation_runner.py1000start_round: 起始轮次deliberatebackend-docstringSimulation
1905backend/app/services/simulation_runner.py1001end_round: 结束轮次deliberatebackend-docstringSimulation
1906backend/app/services/simulation_runner.py1004每轮的汇总信息deliberatebackend-docstringSimulation
1907backend/app/services/simulation_runner.py1008# 按轮次分组deliberatebackend-commentSimulation
1908backend/app/services/simulation_runner.py1041# 转换为列表deliberatebackend-commentSimulation
1909backend/app/services/simulation_runner.py1062获取每个Agent的统计信息deliberatebackend-docstringSimulation
1910backend/app/services/simulation_runner.py1065Agent统计列表deliberatebackend-docstringSimulation
1911backend/app/services/simulation_runner.py1097# 按总动作数排序deliberatebackend-commentSimulation
1912backend/app/services/simulation_runner.py1105清理模拟的运行日志(用于强制重新开始模拟)deliberatebackend-docstringSimulation
1913backend/app/services/simulation_runner.py1107会删除以下文件:deliberatebackend-docstringSimulation
1914backend/app/services/simulation_runner.py1113- twitter_simulation.db模拟数据库deliberatebackend-docstringSimulation
1915backend/app/services/simulation_runner.py1114- reddit_simulation.db模拟数据库deliberatebackend-docstringSimulation
1916backend/app/services/simulation_runner.py1115- env_status.json环境状态deliberatebackend-docstringSimulation
1917backend/app/services/simulation_runner.py1117注意不会删除配置文件simulation_config.json和 profile 文件deliberatebackend-docstringSimulation
1918backend/app/services/simulation_runner.py1120simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1919backend/app/services/simulation_runner.py1123清理结果信息deliberatebackend-docstringSimulation
1920backend/app/services/simulation_runner.py1130return {"success": True, "message": "模拟目录不存在,无需清理"}review-neededbackend-stringSimulation
1921backend/app/services/simulation_runner.py1135# 要删除的文件列表(包括数据库文件)deliberatebackend-commentSimulation
1922backend/app/services/simulation_runner.py1141"twitter_simulation.db", # Twitter 平台数据库review-neededbackend-stringSimulation
1923backend/app/services/simulation_runner.py1142"reddit_simulation.db", # Reddit 平台数据库review-neededbackend-stringSimulation
1924backend/app/services/simulation_runner.py1143"env_status.json", # 环境状态文件review-neededbackend-stringSimulation
1925backend/app/services/simulation_runner.py1146# 要删除的目录列表(包含动作日志)deliberatebackend-commentSimulation
1926backend/app/services/simulation_runner.py1149# 删除文件deliberatebackend-commentSimulation
1927backend/app/services/simulation_runner.py1157errors.append(f"删除 {filename} 失败: {str(e)}")review-neededbackend-stringSimulation
1928backend/app/services/simulation_runner.py1159# 清理平台目录中的动作日志deliberatebackend-commentSimulation
1929backend/app/services/simulation_runner.py1169errors.append(f"删除 {dir_name}/actions.jsonl 失败: {str(e)}")review-neededbackend-stringSimulation
1930backend/app/services/simulation_runner.py1171# 清理内存中的运行状态deliberatebackend-commentSimulation
1931backend/app/services/simulation_runner.py1183# 防止重复清理的标志deliberatebackend-commentSimulation
1932backend/app/services/simulation_runner.py1189清理所有运行中的模拟进程deliberatebackend-docstringSimulation
1933backend/app/services/simulation_runner.py1191在服务器关闭时调用,确保所有子进程被终止deliberatebackend-docstringSimulation
1934backend/app/services/simulation_runner.py1193# 防止重复清理deliberatebackend-commentSimulation
1935backend/app/services/simulation_runner.py1198# 检查是否有内容需要清理(避免空进程的进程打印无用日志)deliberatebackend-commentSimulation
1936backend/app/services/simulation_runner.py1203return # 没有需要清理的内容,静默返回deliberatebackend-docstringSimulation
1937backend/app/services/simulation_runner.py1207# 首先停止所有图谱记忆更新器stop_all 内部会打印日志)deliberatebackend-commentSimulation
1938backend/app/services/simulation_runner.py1214# 复制字典以避免在迭代时修改deliberatebackend-commentSimulation
1939backend/app/services/simulation_runner.py1219if process.poll() is None: # 进程仍在运行deliberatebackend-docstringSimulation
1940backend/app/services/simulation_runner.py1223# 使用跨平台的进程终止方法deliberatebackend-commentSimulation
1941backend/app/services/simulation_runner.py1226# 进程可能已经不存在,尝试直接终止deliberatebackend-commentSimulation
1942backend/app/services/simulation_runner.py1233# 更新 run_state.jsondeliberatebackend-commentSimulation
1943backend/app/services/simulation_runner.py1240state.error = "服务器关闭,模拟被终止"review-neededbackend-stringSimulation
1944backend/app/services/simulation_runner.py1243# 同时更新 state.json将状态设为 stoppeddeliberatebackend-commentSimulation
1945backend/app/services/simulation_runner.py1264# 清理文件句柄deliberatebackend-commentSimulation
1946backend/app/services/simulation_runner.py1281# 清理内存中的状态deliberatebackend-commentSimulation
1947backend/app/services/simulation_runner.py1290注册清理函数deliberatebackend-docstringSimulation
1948backend/app/services/simulation_runner.py1292在 Flask 应用启动时调用,确保服务器关闭时清理所有模拟进程deliberatebackend-docstringSimulation
1949backend/app/services/simulation_runner.py1299# Flask debug 模式下,只在 reloader 子进程中注册清理(实际运行应用的进程)deliberatebackend-commentSimulation
1950backend/app/services/simulation_runner.py1300# WERKZEUG_RUN_MAIN=true 表示是 reloader 子进程deliberatebackend-commentSimulation
1951backend/app/services/simulation_runner.py1301# 如果不是 debug 模式,则没有这个环境变量,也需要注册deliberatebackend-commentSimulation
1952backend/app/services/simulation_runner.py1305# 在 debug 模式下,只在 reloader 子进程中注册;非 debug 模式下始终注册deliberatebackend-commentSimulation
1953backend/app/services/simulation_runner.py1307_cleanup_registered = True # 标记已注册,防止子进程再次尝试deliberatebackend-docstringSimulation
1954backend/app/services/simulation_runner.py1310# 保存原有的信号处理器deliberatebackend-commentSimulation
1955backend/app/services/simulation_runner.py1313# SIGHUP 只在 Unix 系统存在macOS/LinuxWindows 没有deliberatebackend-commentSimulation
1956backend/app/services/simulation_runner.py1320"""信号处理器:先清理模拟进程,再调用原处理器"""deliberatebackend-docstringSimulation
1957backend/app/services/simulation_runner.py1321# 只有在有进程需要清理时才打印日志deliberatebackend-commentSimulation
1958backend/app/services/simulation_runner.py1326# 调用原有的信号处理器,让 Flask 正常退出deliberatebackend-commentSimulation
1959backend/app/services/simulation_runner.py1332# SIGHUP: 终端关闭时发送deliberatebackend-commentSimulation
1960backend/app/services/simulation_runner.py1336# 默认行为:正常退出deliberatebackend-commentSimulation
1961backend/app/services/simulation_runner.py1339# 如果原处理器不可调用(如 SIG_DFL则使用默认行为deliberatebackend-commentSimulation
1962backend/app/services/simulation_runner.py1342# 注册 atexit 处理器(作为备用)deliberatebackend-commentSimulation
1963backend/app/services/simulation_runner.py1345# 注册信号处理器(仅在主线程中)deliberatebackend-commentSimulation
1964backend/app/services/simulation_runner.py1347# SIGTERM: kill 命令默认信号deliberatebackend-commentSimulation
1965backend/app/services/simulation_runner.py1351# SIGHUP: 终端关闭(仅 Unix 系统)deliberatebackend-commentSimulation
1966backend/app/services/simulation_runner.py1355# 不在主线程中,只能使用 atexitdeliberatebackend-commentSimulation
1967backend/app/services/simulation_runner.py1363获取所有正在运行的模拟ID列表deliberatebackend-docstringSimulation
1968backend/app/services/simulation_runner.py1371# ============== Interview 功能 ==============deliberatebackend-commentSimulation
1969backend/app/services/simulation_runner.py1376检查模拟环境是否存活可以接收Interview命令deliberatebackend-docstringSimulation
1970backend/app/services/simulation_runner.py1379simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1971backend/app/services/simulation_runner.py1382True 表示环境存活False 表示环境已关闭deliberatebackend-docstringSimulation
1972backend/app/services/simulation_runner.py1394获取模拟环境的详细状态信息deliberatebackend-docstringSimulation
1973backend/app/services/simulation_runner.py1397simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1974backend/app/services/simulation_runner.py1400状态详情字典,包含 status, twitter_available, reddit_available, timestampdeliberatebackend-docstringSimulation
1975backend/app/services/simulation_runner.py1437采访单个Agentdeliberatebackend-docstringSimulation
1976backend/app/services/simulation_runner.py1440simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1977backend/app/services/simulation_runner.py1442prompt: 采访问题deliberatebackend-docstringSimulation
1978backend/app/services/simulation_runner.py1443platform: 指定平台(可选)deliberatebackend-docstringSimulation
1979backend/app/services/simulation_runner.py1444- "twitter": 只采访Twitter平台review-neededbackend-stringSimulation
1980backend/app/services/simulation_runner.py1445- "reddit": 只采访Reddit平台review-neededbackend-stringSimulation
1981backend/app/services/simulation_runner.py1446- None: 双平台模拟时同时采访两个平台,返回整合结果deliberatebackend-docstringSimulation
1982backend/app/services/simulation_runner.py1447timeout: 超时时间(秒)deliberatebackend-docstringSimulation
1983backend/app/services/simulation_runner.py1450采访结果字典deliberatebackend-docstringSimulation
1984backend/app/services/simulation_runner.py1453ValueError: 模拟不存在或环境未运行deliberatebackend-docstringSimulation
1985backend/app/services/simulation_runner.py1454TimeoutError: 等待响应超时deliberatebackend-docstringSimulation
1986backend/app/services/simulation_runner.py1458raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
1987backend/app/services/simulation_runner.py1463raise ValueError(f"模拟环境未运行或已关闭无法执行Interview: {simulation_id}")review-neededbackend-stringSimulation
1988backend/app/services/simulation_runner.py1500批量采访多个Agentdeliberatebackend-docstringSimulation
1989backend/app/services/simulation_runner.py1503simulation_id: 模拟IDdeliberatebackend-docstringSimulation
1990backend/app/services/simulation_runner.py1504interviews: 采访列表,每个元素包含 {"agent_id": int, "prompt": str, "platform": str(可选)}review-neededbackend-stringSimulation
1991backend/app/services/simulation_runner.py1505platform: 默认平台可选会被每个采访项的platform覆盖deliberatebackend-docstringSimulation
1992backend/app/services/simulation_runner.py1506- "twitter": 默认只采访Twitter平台review-neededbackend-stringSimulation
1993backend/app/services/simulation_runner.py1507- "reddit": 默认只采访Reddit平台review-neededbackend-stringSimulation
1994backend/app/services/simulation_runner.py1508- None: 双平台模拟时每个Agent同时采访两个平台deliberatebackend-docstringSimulation
1995backend/app/services/simulation_runner.py1509timeout: 超时时间(秒)deliberatebackend-docstringSimulation
1996backend/app/services/simulation_runner.py1512批量采访结果字典deliberatebackend-docstringSimulation
1997backend/app/services/simulation_runner.py1515ValueError: 模拟不存在或环境未运行deliberatebackend-docstringSimulation
1998backend/app/services/simulation_runner.py1516TimeoutError: 等待响应超时deliberatebackend-docstringSimulation
1999backend/app/services/simulation_runner.py1520raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
2000backend/app/services/simulation_runner.py1525raise ValueError(f"模拟环境未运行或已关闭无法执行Interview: {simulation_id}")review-neededbackend-stringSimulation
2001backend/app/services/simulation_runner.py1559采访所有Agent全局采访deliberatebackend-docstringSimulation
2002backend/app/services/simulation_runner.py1561使用相同的问题采访模拟中的所有Agentdeliberatebackend-docstringSimulation
2003backend/app/services/simulation_runner.py1564simulation_id: 模拟IDdeliberatebackend-docstringSimulation
2004backend/app/services/simulation_runner.py1565prompt: 采访问题所有Agent使用相同问题deliberatebackend-docstringSimulation
2005backend/app/services/simulation_runner.py1566platform: 指定平台(可选)deliberatebackend-docstringSimulation
2006backend/app/services/simulation_runner.py1567- "twitter": 只采访Twitter平台review-neededbackend-stringSimulation
2007backend/app/services/simulation_runner.py1568- "reddit": 只采访Reddit平台review-neededbackend-stringSimulation
2008backend/app/services/simulation_runner.py1569- None: 双平台模拟时每个Agent同时采访两个平台deliberatebackend-docstringSimulation
2009backend/app/services/simulation_runner.py1570timeout: 超时时间(秒)deliberatebackend-docstringSimulation
2010backend/app/services/simulation_runner.py1573全局采访结果字典deliberatebackend-docstringSimulation
2011backend/app/services/simulation_runner.py1577raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
2012backend/app/services/simulation_runner.py1579# 从配置文件获取所有Agent信息deliberatebackend-commentSimulation
2013backend/app/services/simulation_runner.py1582raise ValueError(f"模拟配置不存在: {simulation_id}")review-neededbackend-stringSimulation
2014backend/app/services/simulation_runner.py1589raise ValueError(f"模拟配置中没有Agent: {simulation_id}")review-neededbackend-stringSimulation
2015backend/app/services/simulation_runner.py1591# 构建批量采访列表deliberatebackend-commentSimulation
2016backend/app/services/simulation_runner.py1617关闭模拟环境(而不是停止模拟进程)deliberatebackend-docstringSimulation
2017backend/app/services/simulation_runner.py1619向模拟发送关闭环境命令,使其优雅退出等待命令模式deliberatebackend-docstringSimulation
2018backend/app/services/simulation_runner.py1622simulation_id: 模拟IDdeliberatebackend-docstringSimulation
2019backend/app/services/simulation_runner.py1623timeout: 超时时间(秒)deliberatebackend-docstringSimulation
2020backend/app/services/simulation_runner.py1626操作结果字典deliberatebackend-docstringSimulation
2021backend/app/services/simulation_runner.py1630raise ValueError(f"模拟不存在: {simulation_id}")review-neededbackend-stringSimulation
2022backend/app/services/simulation_runner.py1637"message": "环境已经关闭"review-neededbackend-stringSimulation
2023backend/app/services/simulation_runner.py1647"message": "环境关闭命令已发送",review-neededbackend-stringSimulation
2024backend/app/services/simulation_runner.py1652# 超时可能是因为环境正在关闭deliberatebackend-commentSimulation
2025backend/app/services/simulation_runner.py1655"message": "环境关闭命令已发送(等待响应超时,环境可能正在关闭)"review-neededbackend-stringSimulation
2026backend/app/services/simulation_runner.py1666"""从单个数据库获取Interview历史"""deliberatebackend-docstringSimulation
2027backend/app/services/simulation_runner.py1725获取Interview历史记录从数据库读取deliberatebackend-docstringSimulation
2028backend/app/services/simulation_runner.py1728simulation_id: 模拟IDdeliberatebackend-docstringSimulation
2029backend/app/services/simulation_runner.py1729platform: 平台类型reddit/twitter/Nonedeliberatebackend-docstringSimulation
2030backend/app/services/simulation_runner.py1730- "reddit": 只获取Reddit平台的历史review-neededbackend-stringSimulation
2031backend/app/services/simulation_runner.py1731- "twitter": 只获取Twitter平台的历史review-neededbackend-stringSimulation
2032backend/app/services/simulation_runner.py1732- None: 获取两个平台的所有历史deliberatebackend-docstringSimulation
2033backend/app/services/simulation_runner.py1733agent_id: 指定Agent ID可选只获取该Agent的历史deliberatebackend-docstringSimulation
2034backend/app/services/simulation_runner.py1734limit: 每个平台返回数量限制deliberatebackend-docstringSimulation
2035backend/app/services/simulation_runner.py1737Interview历史记录列表deliberatebackend-docstringSimulation
2036backend/app/services/simulation_runner.py1743# 确定要查询的平台deliberatebackend-commentSimulation
2037backend/app/services/simulation_runner.py1747# 不指定platform时查询两个平台deliberatebackend-commentSimulation
2038backend/app/services/simulation_runner.py1760# 按时间降序排序deliberatebackend-commentSimulation
2039backend/app/services/simulation_runner.py1763# 如果查询了多个平台,限制总数deliberatebackend-commentSimulation
2040backend/app/services/text_processor.py2文本处理服务deliberatebackend-docstringn/a
2041backend/app/services/text_processor.py10"""文本处理器"""deliberatebackend-docstringn/a
2042backend/app/services/text_processor.py14"""从多个文件提取文本"""deliberatebackend-docstringn/a
2043backend/app/services/text_processor.py24分割文本deliberatebackend-docstringn/a
2044backend/app/services/text_processor.py27text: 原始文本deliberatebackend-docstringn/a
2045backend/app/services/text_processor.py28chunk_size: 块大小deliberatebackend-docstringn/a
2046backend/app/services/text_processor.py29overlap: 重叠大小deliberatebackend-docstringn/a
2047backend/app/services/text_processor.py32文本块列表deliberatebackend-docstringn/a
2048backend/app/services/text_processor.py39预处理文本deliberatebackend-docstringn/a
2049backend/app/services/text_processor.py40- 移除多余空白deliberatebackend-docstringn/a
2050backend/app/services/text_processor.py41- 标准化换行deliberatebackend-docstringn/a
2051backend/app/services/text_processor.py44text: 原始文本deliberatebackend-docstringn/a
2052backend/app/services/text_processor.py47处理后的文本deliberatebackend-docstringn/a
2053backend/app/services/text_processor.py51# 标准化换行deliberatebackend-commentn/a
2054backend/app/services/text_processor.py54# 移除连续空行(保留最多两个换行)deliberatebackend-commentn/a
2055backend/app/services/text_processor.py57# 移除行首行尾空白deliberatebackend-commentn/a
2056backend/app/services/text_processor.py65"""获取文本统计信息"""deliberatebackend-docstringn/a
2057backend/app/services/zep_entity_reader.py2Zep实体读取与过滤服务deliberatebackend-docstringn/a
2058backend/app/services/zep_entity_reader.py3从Zep图谱中读取节点筛选出符合预定义实体类型的节点deliberatebackend-docstringn/a
2059backend/app/services/zep_entity_reader.py19# 用于泛型返回类型deliberatebackend-commentn/a
2060backend/app/services/zep_entity_reader.py25"""实体节点数据结构"""deliberatebackend-docstringn/a
2061backend/app/services/zep_entity_reader.py31# 相关的边信息deliberatebackend-commentn/a
2062backend/app/services/zep_entity_reader.py33# 相关的其他节点信息deliberatebackend-commentn/a
2063backend/app/services/zep_entity_reader.py48"""获取实体类型排除默认的Entity标签"""deliberatebackend-docstringn/a
2064backend/app/services/zep_entity_reader.py57"""过滤后的实体集合"""deliberatebackend-docstringn/a
2065backend/app/services/zep_entity_reader.py74Zep实体读取与过滤服务deliberatebackend-docstringn/a
2066backend/app/services/zep_entity_reader.py76主要功能:deliberatebackend-docstringn/a
2067backend/app/services/zep_entity_reader.py771. 从Zep图谱读取所有节点deliberatebackend-docstringn/a
2068backend/app/services/zep_entity_reader.py782. 筛选出符合预定义实体类型的节点Labels不只是Entity的节点deliberatebackend-docstringn/a
2069backend/app/services/zep_entity_reader.py793. 获取每个实体的相关边和关联节点信息deliberatebackend-docstringn/a
2070backend/app/services/zep_entity_reader.py93带重试机制的Zep API调用deliberatebackend-docstringn/a
2071backend/app/services/zep_entity_reader.py96func: 要执行的函数无参数的lambda或callabledeliberatebackend-docstringn/a
2072backend/app/services/zep_entity_reader.py97operation_name: 操作名称,用于日志deliberatebackend-docstringn/a
2073backend/app/services/zep_entity_reader.py98max_retries: 最大重试次数默认3次即最多尝试3次deliberatebackend-docstringn/a
2074backend/app/services/zep_entity_reader.py99initial_delay: 初始延迟秒数deliberatebackend-docstringn/a
2075backend/app/services/zep_entity_reader.py102API调用结果deliberatebackend-docstringn/a
2076backend/app/services/zep_entity_reader.py117delay *= 2 # 指数退避deliberatebackend-docstringn/a
2077backend/app/services/zep_entity_reader.py125获取图谱的所有节点(分页获取)deliberatebackend-docstringn/a
2078backend/app/services/zep_entity_reader.py128graph_id: 图谱IDdeliberatebackend-docstringn/a
2079backend/app/services/zep_entity_reader.py131节点列表deliberatebackend-docstringn/a
2080backend/app/services/zep_entity_reader.py152获取图谱的所有边(分页获取)deliberatebackend-docstringn/a
2081backend/app/services/zep_entity_reader.py155graph_id: 图谱IDdeliberatebackend-docstringn/a
2082backend/app/services/zep_entity_reader.py158边列表deliberatebackend-docstringn/a
2083backend/app/services/zep_entity_reader.py180获取指定节点的所有相关边(带重试机制)deliberatebackend-docstringn/a
2084backend/app/services/zep_entity_reader.py183node_uuid: 节点UUIDdeliberatebackend-docstringn/a
2085backend/app/services/zep_entity_reader.py186边列表deliberatebackend-docstringn/a
2086backend/app/services/zep_entity_reader.py189# 使用重试机制调用Zep APIdeliberatebackend-commentn/a
2087backend/app/services/zep_entity_reader.py192operation_name=f"获取节点边(node={node_uuid[:8]}...)"review-neededbackend-stringn/a
2088backend/app/services/zep_entity_reader.py218筛选出符合预定义实体类型的节点deliberatebackend-docstringn/a
2089backend/app/services/zep_entity_reader.py220筛选逻辑:deliberatebackend-docstringn/a
2090backend/app/services/zep_entity_reader.py221- 如果节点的Labels只有一个"Entity",说明这个实体不符合我们预定义的类型,跳过review-neededbackend-stringn/a
2091backend/app/services/zep_entity_reader.py222- 如果节点的Labels包含除"Entity"和"Node"之外的标签,说明符合预定义类型,保留review-neededbackend-stringn/a
2092backend/app/services/zep_entity_reader.py225graph_id: 图谱IDdeliberatebackend-docstringn/a
2093backend/app/services/zep_entity_reader.py226defined_entity_types: 预定义的实体类型列表(可选,如果提供则只保留这些类型)deliberatebackend-docstringn/a
2094backend/app/services/zep_entity_reader.py227enrich_with_edges: 是否获取每个实体的相关边信息deliberatebackend-docstringn/a
2095backend/app/services/zep_entity_reader.py230FilteredEntities: 过滤后的实体集合deliberatebackend-docstringn/a
2096backend/app/services/zep_entity_reader.py246# 获取所有节点deliberatebackend-commentn/a
2097backend/app/services/zep_entity_reader.py262# 获取所有边(用于后续关联查找)deliberatebackend-commentn/a
2098backend/app/services/zep_entity_reader.py265# 构建节点UUID到节点数据的映射deliberatebackend-commentn/a
2099backend/app/services/zep_entity_reader.py268# 筛选符合条件的实体deliberatebackend-commentn/a
2100backend/app/services/zep_entity_reader.py275# 筛选逻辑Labels必须包含除"Entity"和"Node"之外的标签deliberatebackend-commentn/a
2101backend/app/services/zep_entity_reader.py279# 只有默认标签,跳过deliberatebackend-commentn/a
2102backend/app/services/zep_entity_reader.py282# 如果指定了预定义类型,检查是否匹配deliberatebackend-commentn/a
2103backend/app/services/zep_entity_reader.py293# 创建实体节点对象deliberatebackend-commentn/a
2104backend/app/services/zep_entity_reader.py302# 获取相关边和节点deliberatebackend-commentn/a
2105backend/app/services/zep_entity_reader.py327# 获取关联节点的基本信息deliberatebackend-commentn/a
2106backend/app/services/zep_entity_reader.py358获取单个实体及其完整上下文(边和关联节点,带重试机制)deliberatebackend-docstringn/a
2107backend/app/services/zep_entity_reader.py361graph_id: 图谱IDdeliberatebackend-docstringn/a
2108backend/app/services/zep_entity_reader.py362entity_uuid: 实体UUIDdeliberatebackend-docstringn/a
2109backend/app/services/zep_entity_reader.py365EntityNode或Nonedeliberatebackend-docstringn/a
2110backend/app/services/zep_entity_reader.py368# 使用重试机制获取节点deliberatebackend-commentn/a
2111backend/app/services/zep_entity_reader.py371operation_name=f"获取节点详情(uuid={entity_uuid[:8]}...)"review-neededbackend-stringn/a
2112backend/app/services/zep_entity_reader.py377# 获取节点的边deliberatebackend-commentn/a
2113backend/app/services/zep_entity_reader.py380# 获取所有节点用于关联查找deliberatebackend-commentn/a
2114backend/app/services/zep_entity_reader.py384# 处理相关边和节点deliberatebackend-commentn/a
2115backend/app/services/zep_entity_reader.py406# 获取关联节点信息deliberatebackend-commentn/a
2116backend/app/services/zep_entity_reader.py439获取指定类型的所有实体deliberatebackend-docstringn/a
2117backend/app/services/zep_entity_reader.py442graph_id: 图谱IDdeliberatebackend-docstringn/a
2118backend/app/services/zep_entity_reader.py443entity_type: 实体类型(如 "Student", "PublicFigure" 等)review-neededbackend-stringn/a
2119backend/app/services/zep_entity_reader.py444enrich_with_edges: 是否获取相关边信息deliberatebackend-docstringn/a
2120backend/app/services/zep_entity_reader.py447实体列表deliberatebackend-docstringn/a
2121backend/app/services/zep_graph_memory_updater.py2Zep图谱记忆更新服务deliberatebackend-docstringn/a
2122backend/app/services/zep_graph_memory_updater.py3将模拟中的Agent活动动态更新到Zep图谱中deliberatebackend-docstringn/a
2123backend/app/services/zep_graph_memory_updater.py26"""Agent活动记录"""deliberatebackend-docstringn/a
2124backend/app/services/zep_graph_memory_updater.py37将活动转换为可以发送给Zep的文本描述deliberatebackend-docstringn/a
2125backend/app/services/zep_graph_memory_updater.py39采用自然语言描述格式让Zep能够从中提取实体和关系deliberatebackend-docstringn/a
2126backend/app/services/zep_graph_memory_updater.py40不添加模拟相关的前缀,避免误导图谱更新deliberatebackend-docstringn/a
2127backend/app/services/zep_graph_memory_updater.py42# 根据不同的动作类型生成不同的描述deliberatebackend-commentn/a
2128backend/app/services/zep_graph_memory_updater.py61# 直接返回 "agent名称: 活动描述" 格式,不添加模拟前缀deliberatebackend-commentn/a
2129backend/app/services/zep_graph_memory_updater.py67return f"发布了一条帖子:「{content}」"gapbackend-prompt-labeln/a
2130backend/app/services/zep_graph_memory_updater.py68return "发布了一条帖子"gapbackend-prompt-labeln/a
2131backend/app/services/zep_graph_memory_updater.py71"""点赞帖子 - 包含帖子原文和作者信息"""deliberatebackend-docstringn/a
2132backend/app/services/zep_graph_memory_updater.py76return f"点赞了{post_author}的帖子:「{post_content}」"gapbackend-prompt-labeln/a
2133backend/app/services/zep_graph_memory_updater.py78return f"点赞了一条帖子:「{post_content}」"gapbackend-prompt-labeln/a
2134backend/app/services/zep_graph_memory_updater.py80return f"点赞了{post_author}的一条帖子"gapbackend-prompt-labeln/a
2135backend/app/services/zep_graph_memory_updater.py81return "点赞了一条帖子"gapbackend-prompt-labeln/a
2136backend/app/services/zep_graph_memory_updater.py84"""踩帖子 - 包含帖子原文和作者信息"""deliberatebackend-docstringn/a
2137backend/app/services/zep_graph_memory_updater.py89return f"踩了{post_author}的帖子:「{post_content}」"gapbackend-prompt-labeln/a
2138backend/app/services/zep_graph_memory_updater.py91return f"踩了一条帖子:「{post_content}」"gapbackend-prompt-labeln/a
2139backend/app/services/zep_graph_memory_updater.py93return f"踩了{post_author}的一条帖子"gapbackend-prompt-labeln/a
2140backend/app/services/zep_graph_memory_updater.py94return "踩了一条帖子"gapbackend-prompt-labeln/a
2141backend/app/services/zep_graph_memory_updater.py97"""转发帖子 - 包含原帖内容和作者信息"""deliberatebackend-docstringn/a
2142backend/app/services/zep_graph_memory_updater.py102return f"转发了{original_author}的帖子:「{original_content}」"gapbackend-prompt-labeln/a
2143backend/app/services/zep_graph_memory_updater.py104return f"转发了一条帖子:「{original_content}」"gapbackend-prompt-labeln/a
2144backend/app/services/zep_graph_memory_updater.py106return f"转发了{original_author}的一条帖子"gapbackend-prompt-labeln/a
2145backend/app/services/zep_graph_memory_updater.py107return "转发了一条帖子"gapbackend-prompt-labeln/a
2146backend/app/services/zep_graph_memory_updater.py110"""引用帖子 - 包含原帖内容、作者信息和引用评论"""deliberatebackend-docstringn/a
2147backend/app/services/zep_graph_memory_updater.py117base = f"引用了{original_author}的帖子「{original_content}」"gapbackend-prompt-labeln/a
2148backend/app/services/zep_graph_memory_updater.py119base = f"引用了一条帖子「{original_content}」"gapbackend-prompt-labeln/a
2149backend/app/services/zep_graph_memory_updater.py121base = f"引用了{original_author}的一条帖子"gapbackend-prompt-labeln/a
2150backend/app/services/zep_graph_memory_updater.py123base = "引用了一条帖子"gapbackend-prompt-labeln/a
2151backend/app/services/zep_graph_memory_updater.py126base += f",并评论道:「{quote_content}」"gapbackend-prompt-labeln/a
2152backend/app/services/zep_graph_memory_updater.py130"""关注用户 - 包含被关注用户的名称"""deliberatebackend-docstringn/a
2153backend/app/services/zep_graph_memory_updater.py134return f"关注了用户「{target_user_name}」"gapbackend-prompt-labeln/a
2154backend/app/services/zep_graph_memory_updater.py135return "关注了一个用户"gapbackend-prompt-labeln/a
2155backend/app/services/zep_graph_memory_updater.py138"""发表评论 - 包含评论内容和所评论的帖子信息"""deliberatebackend-docstringn/a
2156backend/app/services/zep_graph_memory_updater.py145return f"在{post_author}的帖子「{post_content}」下评论道:「{content}」"gapbackend-prompt-labeln/a
2157backend/app/services/zep_graph_memory_updater.py147return f"在帖子「{post_content}」下评论道:「{content}」"gapbackend-prompt-labeln/a
2158backend/app/services/zep_graph_memory_updater.py149return f"在{post_author}的帖子下评论道:「{content}」"gapbackend-prompt-labeln/a
2159backend/app/services/zep_graph_memory_updater.py150return f"评论道:「{content}」"gapbackend-prompt-labeln/a
2160backend/app/services/zep_graph_memory_updater.py151return "发表了评论"gapbackend-prompt-labeln/a
2161backend/app/services/zep_graph_memory_updater.py154"""点赞评论 - 包含评论内容和作者信息"""deliberatebackend-docstringn/a
2162backend/app/services/zep_graph_memory_updater.py159return f"点赞了{comment_author}的评论:「{comment_content}」"gapbackend-prompt-labeln/a
2163backend/app/services/zep_graph_memory_updater.py161return f"点赞了一条评论:「{comment_content}」"gapbackend-prompt-labeln/a
2164backend/app/services/zep_graph_memory_updater.py163return f"点赞了{comment_author}的一条评论"gapbackend-prompt-labeln/a
2165backend/app/services/zep_graph_memory_updater.py164return "点赞了一条评论"gapbackend-prompt-labeln/a
2166backend/app/services/zep_graph_memory_updater.py167"""踩评论 - 包含评论内容和作者信息"""deliberatebackend-docstringn/a
2167backend/app/services/zep_graph_memory_updater.py172return f"踩了{comment_author}的评论:「{comment_content}」"gapbackend-prompt-labeln/a
2168backend/app/services/zep_graph_memory_updater.py174return f"踩了一条评论:「{comment_content}」"gapbackend-prompt-labeln/a
2169backend/app/services/zep_graph_memory_updater.py176return f"踩了{comment_author}的一条评论"gapbackend-prompt-labeln/a
2170backend/app/services/zep_graph_memory_updater.py177return "踩了一条评论"gapbackend-prompt-labeln/a
2171backend/app/services/zep_graph_memory_updater.py180"""搜索帖子 - 包含搜索关键词"""deliberatebackend-docstringn/a
2172backend/app/services/zep_graph_memory_updater.py182return f"搜索了「{query}」" if query else "进行了搜索"gapbackend-prompt-labeln/a
2173backend/app/services/zep_graph_memory_updater.py185"""搜索用户 - 包含搜索关键词"""deliberatebackend-docstringn/a
2174backend/app/services/zep_graph_memory_updater.py187return f"搜索了用户「{query}」" if query else "搜索了用户"gapbackend-prompt-labeln/a
2175backend/app/services/zep_graph_memory_updater.py190"""屏蔽用户 - 包含被屏蔽用户的名称"""deliberatebackend-docstringn/a
2176backend/app/services/zep_graph_memory_updater.py194return f"屏蔽了用户「{target_user_name}」"gapbackend-prompt-labeln/a
2177backend/app/services/zep_graph_memory_updater.py195return "屏蔽了一个用户"gapbackend-prompt-labeln/a
2178backend/app/services/zep_graph_memory_updater.py198# 对于未知的动作类型,生成通用描述deliberatebackend-commentn/a
2179backend/app/services/zep_graph_memory_updater.py199return f"执行了{self.action_type}操作"gapbackend-prompt-labeln/a
2180backend/app/services/zep_graph_memory_updater.py204Zep图谱记忆更新器deliberatebackend-docstringn/a
2181backend/app/services/zep_graph_memory_updater.py206监控模拟的actions日志文件将新的agent活动实时更新到Zep图谱中。deliberatebackend-docstringn/a
2182backend/app/services/zep_graph_memory_updater.py207按平台分组每累积BATCH_SIZE条活动后批量发送到Zep。deliberatebackend-docstringn/a
2183backend/app/services/zep_graph_memory_updater.py209所有有意义的行为都会被更新到Zepaction_args中会包含完整的上下文信息deliberatebackend-docstringn/a
2184backend/app/services/zep_graph_memory_updater.py210- 点赞/踩的帖子原文deliberatebackend-docstringn/a
2185backend/app/services/zep_graph_memory_updater.py211- 转发/引用的帖子原文deliberatebackend-docstringn/a
2186backend/app/services/zep_graph_memory_updater.py212- 关注/屏蔽的用户名deliberatebackend-docstringn/a
2187backend/app/services/zep_graph_memory_updater.py213- 点赞/踩的评论原文deliberatebackend-docstringn/a
2188backend/app/services/zep_graph_memory_updater.py216# 批量发送大小(每个平台累积多少条后发送)deliberatebackend-commentn/a
2189backend/app/services/zep_graph_memory_updater.py219# 平台名称映射(用于控制台显示)deliberatebackend-commentn/a
2190backend/app/services/zep_graph_memory_updater.py221'twitter': '世界1',gapbackend-prompt-labeln/a
2191backend/app/services/zep_graph_memory_updater.py222'reddit': '世界2',gapbackend-prompt-labeln/a
2192backend/app/services/zep_graph_memory_updater.py225# 发送间隔(秒),避免请求过快deliberatebackend-commentn/a
2193backend/app/services/zep_graph_memory_updater.py228# 重试配置deliberatebackend-commentn/a
2194backend/app/services/zep_graph_memory_updater.py230RETRY_DELAY = 2 # 秒deliberatebackend-docstringn/a
2195backend/app/services/zep_graph_memory_updater.py234初始化更新器deliberatebackend-docstringn/a
2196backend/app/services/zep_graph_memory_updater.py237graph_id: Zep图谱IDdeliberatebackend-docstringn/a
2197backend/app/services/zep_graph_memory_updater.py238api_key: Zep API Key可选默认从配置读取deliberatebackend-docstringn/a
2198backend/app/services/zep_graph_memory_updater.py243# 活动队列deliberatebackend-commentn/a
2199backend/app/services/zep_graph_memory_updater.py246# 按平台分组的活动缓冲区每个平台各自累积到BATCH_SIZE后批量发送deliberatebackend-commentn/a
2200backend/app/services/zep_graph_memory_updater.py253# 控制标志deliberatebackend-commentn/a
2201backend/app/services/zep_graph_memory_updater.py257# 统计deliberatebackend-commentn/a
2202backend/app/services/zep_graph_memory_updater.py258self._total_activities = 0 # 实际添加到队列的活动数deliberatebackend-docstringn/a
2203backend/app/services/zep_graph_memory_updater.py259self._total_sent = 0 # 成功发送到Zep的批次数deliberatebackend-docstringn/a
2204backend/app/services/zep_graph_memory_updater.py260self._total_items_sent = 0 # 成功发送到Zep的活动条数deliberatebackend-docstringn/a
2205backend/app/services/zep_graph_memory_updater.py261self._failed_count = 0 # 发送失败的批次数deliberatebackend-docstringn/a
2206backend/app/services/zep_graph_memory_updater.py262self._skipped_count = 0 # 被过滤跳过的活动数DO_NOTHINGdeliberatebackend-docstringn/a
2207backend/app/services/zep_graph_memory_updater.py267"""获取平台的显示名称"""deliberatebackend-docstringn/a
2208backend/app/services/zep_graph_memory_updater.py271"""启动后台工作线程"""deliberatebackend-docstringn/a
2209backend/app/services/zep_graph_memory_updater.py289"""停止后台工作线程"""deliberatebackend-docstringn/a
2210backend/app/services/zep_graph_memory_updater.py292# 发送剩余的活动deliberatebackend-commentn/a
2211backend/app/services/zep_graph_memory_updater.py302添加一个agent活动到队列deliberatebackend-docstringn/a
2212backend/app/services/zep_graph_memory_updater.py304所有有意义的行为都会被添加到队列,包括:deliberatebackend-docstringn/a
2213backend/app/services/zep_graph_memory_updater.py305- CREATE_POST发帖deliberatebackend-docstringn/a
2214backend/app/services/zep_graph_memory_updater.py306- CREATE_COMMENT评论deliberatebackend-docstringn/a
2215backend/app/services/zep_graph_memory_updater.py307- QUOTE_POST引用帖子deliberatebackend-docstringn/a
2216backend/app/services/zep_graph_memory_updater.py308- SEARCH_POSTS搜索帖子deliberatebackend-docstringn/a
2217backend/app/services/zep_graph_memory_updater.py309- SEARCH_USER搜索用户deliberatebackend-docstringn/a
2218backend/app/services/zep_graph_memory_updater.py310- LIKE_POST/DISLIKE_POST点赞/踩帖子)deliberatebackend-docstringn/a
2219backend/app/services/zep_graph_memory_updater.py311- REPOST转发deliberatebackend-docstringn/a
2220backend/app/services/zep_graph_memory_updater.py312- FOLLOW关注deliberatebackend-docstringn/a
2221backend/app/services/zep_graph_memory_updater.py313- MUTE屏蔽deliberatebackend-docstringn/a
2222backend/app/services/zep_graph_memory_updater.py314- LIKE_COMMENT/DISLIKE_COMMENT点赞/踩评论)deliberatebackend-docstringn/a
2223backend/app/services/zep_graph_memory_updater.py316action_args中会包含完整的上下文信息如帖子原文、用户名等deliberatebackend-docstringn/a
2224backend/app/services/zep_graph_memory_updater.py319activity: Agent活动记录deliberatebackend-docstringn/a
2225backend/app/services/zep_graph_memory_updater.py321# 跳过DO_NOTHING类型的活动deliberatebackend-commentn/a
2226backend/app/services/zep_graph_memory_updater.py332从字典数据添加活动deliberatebackend-docstringn/a
2227backend/app/services/zep_graph_memory_updater.py335data: 从actions.jsonl解析的字典数据deliberatebackend-docstringn/a
2228backend/app/services/zep_graph_memory_updater.py336platform: 平台名称 (twitter/reddit)deliberatebackend-docstringn/a
2229backend/app/services/zep_graph_memory_updater.py338# 跳过事件类型的条目deliberatebackend-commentn/a
2230backend/app/services/zep_graph_memory_updater.py355"""后台工作循环 - 按平台批量发送活动到Zep"""deliberatebackend-docstringn/a
2231backend/app/services/zep_graph_memory_updater.py359# 尝试从队列获取活动超时1秒deliberatebackend-commentn/a
2232backend/app/services/zep_graph_memory_updater.py363# 将活动添加到对应平台的缓冲区deliberatebackend-commentn/a
2233backend/app/services/zep_graph_memory_updater.py370# 检查该平台是否达到批量大小deliberatebackend-commentn/a
2234backend/app/services/zep_graph_memory_updater.py374# 释放锁后再发送deliberatebackend-commentn/a
2235backend/app/services/zep_graph_memory_updater.py376# 发送间隔,避免请求过快deliberatebackend-commentn/a
2236backend/app/services/zep_graph_memory_updater.py388批量发送活动到Zep图谱合并为一条文本deliberatebackend-docstringn/a
2237backend/app/services/zep_graph_memory_updater.py391activities: Agent活动列表deliberatebackend-docstringn/a
2238backend/app/services/zep_graph_memory_updater.py392platform: 平台名称deliberatebackend-docstringn/a
2239backend/app/services/zep_graph_memory_updater.py397# 将多条活动合并为一条文本,用换行分隔deliberatebackend-commentn/a
2240backend/app/services/zep_graph_memory_updater.py401# 带重试的发送deliberatebackend-commentn/a
2241backend/app/services/zep_graph_memory_updater.py426"""发送队列和缓冲区中剩余的活动"""deliberatebackend-docstringn/a
2242backend/app/services/zep_graph_memory_updater.py427# 首先处理队列中剩余的活动,添加到缓冲区deliberatebackend-commentn/a
2243backend/app/services/zep_graph_memory_updater.py439# 然后发送各平台缓冲区中剩余的活动即使不足BATCH_SIZE条deliberatebackend-commentn/a
2244backend/app/services/zep_graph_memory_updater.py446# 清空所有缓冲区deliberatebackend-commentn/a
2245backend/app/services/zep_graph_memory_updater.py451"""获取统计信息"""deliberatebackend-docstringn/a
2246backend/app/services/zep_graph_memory_updater.py458"total_activities": self._total_activities, # 添加到队列的活动总数gapbackend-prompt-labeln/a
2247backend/app/services/zep_graph_memory_updater.py459"batches_sent": self._total_sent, # 成功发送的批次数gapbackend-prompt-labeln/a
2248backend/app/services/zep_graph_memory_updater.py460"items_sent": self._total_items_sent, # 成功发送的活动条数gapbackend-prompt-labeln/a
2249backend/app/services/zep_graph_memory_updater.py461"failed_count": self._failed_count, # 发送失败的批次数gapbackend-prompt-labeln/a
2250backend/app/services/zep_graph_memory_updater.py462"skipped_count": self._skipped_count, # 被过滤跳过的活动数DO_NOTHINGgapbackend-prompt-labeln/a
2251backend/app/services/zep_graph_memory_updater.py464"buffer_sizes": buffer_sizes, # 各平台缓冲区大小gapbackend-prompt-labeln/a
2252backend/app/services/zep_graph_memory_updater.py471管理多个模拟的Zep图谱记忆更新器deliberatebackend-docstringn/a
2253backend/app/services/zep_graph_memory_updater.py473每个模拟可以有自己的更新器实例deliberatebackend-docstringn/a
2254backend/app/services/zep_graph_memory_updater.py482为模拟创建图谱记忆更新器deliberatebackend-docstringn/a
2255backend/app/services/zep_graph_memory_updater.py485simulation_id: 模拟IDdeliberatebackend-docstringn/a
2256backend/app/services/zep_graph_memory_updater.py486graph_id: Zep图谱IDdeliberatebackend-docstringn/a
2257backend/app/services/zep_graph_memory_updater.py489ZepGraphMemoryUpdater实例deliberatebackend-docstringn/a
2258backend/app/services/zep_graph_memory_updater.py492# 如果已存在,先停止旧的deliberatebackend-commentn/a
2259backend/app/services/zep_graph_memory_updater.py505"""获取模拟的更新器"""deliberatebackend-docstringn/a
2260backend/app/services/zep_graph_memory_updater.py510"""停止并移除模拟的更新器"""deliberatebackend-docstringn/a
2261backend/app/services/zep_graph_memory_updater.py517# 防止 stop_all 重复调用的标志deliberatebackend-commentn/a
2262backend/app/services/zep_graph_memory_updater.py522"""停止所有更新器"""deliberatebackend-docstringn/a
2263backend/app/services/zep_graph_memory_updater.py523# 防止重复调用deliberatebackend-commentn/a
2264backend/app/services/zep_graph_memory_updater.py540"""获取所有更新器的统计信息"""deliberatebackend-docstringn/a
2265backend/app/services/zep_tools.py2Zep检索工具服务deliberatebackend-docstringn/a
2266backend/app/services/zep_tools.py3封装图谱搜索、节点读取、边查询等工具供Report Agent使用deliberatebackend-docstringn/a
2267backend/app/services/zep_tools.py5核心检索工具(优化后):deliberatebackend-docstringn/a
2268backend/app/services/zep_tools.py61. InsightForge深度洞察检索- 最强大的混合检索,自动生成子问题并多维度检索deliberatebackend-docstringn/a
2269backend/app/services/zep_tools.py72. PanoramaSearch广度搜索- 获取全貌,包括过期内容deliberatebackend-docstringn/a
2270backend/app/services/zep_tools.py83. QuickSearch简单搜索- 快速检索deliberatebackend-docstringn/a
2271backend/app/services/zep_tools.py29"""搜索结果"""deliberatebackend-docstringn/a
2272backend/app/services/zep_tools.py46"""转换为文本格式供LLM理解"""deliberatebackend-docstringn/a
2273backend/app/services/zep_tools.py47text_parts = [f"搜索查询: {self.query}", f"找到 {self.total_count} 条相关信息"]review-neededbackend-stringn/a
2274backend/app/services/zep_tools.py50text_parts.append("\n### 相关事实:")review-neededbackend-stringn/a
2275backend/app/services/zep_tools.py59"""节点信息"""deliberatebackend-docstringn/a
2276backend/app/services/zep_tools.py76"""转换为文本格式"""deliberatebackend-docstringn/a
2277backend/app/services/zep_tools.py77entity_type = next((l for l in self.labels if l not in ["Entity", "Node"]), "未知类型")review-neededbackend-stringn/a
2278backend/app/services/zep_tools.py78return f"实体: {self.name} (类型: {entity_type})\n摘要: {self.summary}"review-neededbackend-stringn/a
2279backend/app/services/zep_tools.py83"""边信息"""deliberatebackend-docstringn/a
2280backend/app/services/zep_tools.py91# 时间信息deliberatebackend-commentn/a
2281backend/app/services/zep_tools.py113"""转换为文本格式"""deliberatebackend-docstringn/a
2282backend/app/services/zep_tools.py116base_text = f"关系: {source} --[{self.name}]--> {target}\n事实: {self.fact}"review-neededbackend-stringn/a
2283backend/app/services/zep_tools.py119valid_at = self.valid_at or "未知"review-neededbackend-stringn/a
2284backend/app/services/zep_tools.py120invalid_at = self.invalid_at or "至今"review-neededbackend-stringn/a
2285backend/app/services/zep_tools.py121base_text += f"\n时效: {valid_at} - {invalid_at}"review-neededbackend-stringn/a
2286backend/app/services/zep_tools.py123base_text += f" (已过期: {self.expired_at})"review-neededbackend-stringn/a
2287backend/app/services/zep_tools.py129"""是否已过期"""deliberatebackend-docstringn/a
2288backend/app/services/zep_tools.py134"""是否已失效"""deliberatebackend-docstringn/a
2289backend/app/services/zep_tools.py141深度洞察检索结果 (InsightForge)deliberatebackend-docstringn/a
2290backend/app/services/zep_tools.py142包含多个子问题的检索结果,以及综合分析deliberatebackend-docstringn/a
2291backend/app/services/zep_tools.py148# 各维度检索结果deliberatebackend-commentn/a
2292backend/app/services/zep_tools.py149semantic_facts: List[str] = field(default_factory=list) # 语义搜索结果deliberatebackend-docstringn/a
2293backend/app/services/zep_tools.py150entity_insights: List[Dict[str, Any]] = field(default_factory=list) # 实体洞察deliberatebackend-docstringn/a
2294backend/app/services/zep_tools.py151relationship_chains: List[str] = field(default_factory=list) # 关系链deliberatebackend-docstringn/a
2295backend/app/services/zep_tools.py153# 统计信息deliberatebackend-commentn/a
2296backend/app/services/zep_tools.py172"""转换为详细的文本格式供LLM理解"""deliberatebackend-docstringn/a
2297backend/app/services/zep_tools.py174f"## 未来预测深度分析",review-neededbackend-stringn/a
2298backend/app/services/zep_tools.py175f"分析问题: {self.query}",review-neededbackend-stringn/a
2299backend/app/services/zep_tools.py176f"预测场景: {self.simulation_requirement}",review-neededbackend-stringn/a
2300backend/app/services/zep_tools.py177f"\n### 预测数据统计",review-neededbackend-stringn/a
2301backend/app/services/zep_tools.py178f"- 相关预测事实: {self.total_facts}条",review-neededbackend-stringn/a
2302backend/app/services/zep_tools.py179f"- 涉及实体: {self.total_entities}个",review-neededbackend-stringn/a
2303backend/app/services/zep_tools.py180f"- 关系链: {self.total_relationships}条"review-neededbackend-stringn/a
2304backend/app/services/zep_tools.py183# 子问题deliberatebackend-commentn/a
2305backend/app/services/zep_tools.py185text_parts.append(f"\n### 分析的子问题")review-neededbackend-stringn/a
2306backend/app/services/zep_tools.py189# 语义搜索结果deliberatebackend-commentn/a
2307backend/app/services/zep_tools.py191text_parts.append(f"\n### 【关键事实】(请在报告中引用这些原文)")review-neededbackend-stringn/a
2308backend/app/services/zep_tools.py195# 实体洞察deliberatebackend-commentn/a
2309backend/app/services/zep_tools.py197text_parts.append(f"\n### 【核心实体】")review-neededbackend-stringn/a
2310backend/app/services/zep_tools.py199text_parts.append(f"- **{entity.get('name', '未知')}** ({entity.get('type', '实体')})")review-neededbackend-stringn/a
2311backend/app/services/zep_tools.py201text_parts.append(f" 摘要: \"{entity.get('summary')}\"")review-neededbackend-stringn/a
2312backend/app/services/zep_tools.py203text_parts.append(f" 相关事实: {len(entity.get('related_facts', []))}条")review-neededbackend-stringn/a
2313backend/app/services/zep_tools.py205# 关系链deliberatebackend-commentn/a
2314backend/app/services/zep_tools.py207text_parts.append(f"\n### 【关系链】")review-neededbackend-stringn/a
2315backend/app/services/zep_tools.py217广度搜索结果 (Panorama)deliberatebackend-docstringn/a
2316backend/app/services/zep_tools.py218包含所有相关信息,包括过期内容deliberatebackend-docstringn/a
2317backend/app/services/zep_tools.py222# 全部节点deliberatebackend-commentn/a
2318backend/app/services/zep_tools.py224# 全部边(包括过期的)deliberatebackend-commentn/a
2319backend/app/services/zep_tools.py226# 当前有效的事实deliberatebackend-commentn/a
2320backend/app/services/zep_tools.py228# 已过期/失效的事实(历史记录)deliberatebackend-commentn/a
2321backend/app/services/zep_tools.py231# 统计deliberatebackend-commentn/a
2322backend/app/services/zep_tools.py251"""转换为文本格式(完整版本,不截断)"""deliberatebackend-docstringn/a
2323backend/app/services/zep_tools.py253f"## 广度搜索结果(未来全景视图)",review-neededbackend-stringn/a
2324backend/app/services/zep_tools.py254f"查询: {self.query}",review-neededbackend-stringn/a
2325backend/app/services/zep_tools.py255f"\n### 统计信息",review-neededbackend-stringn/a
2326backend/app/services/zep_tools.py256f"- 总节点数: {self.total_nodes}",review-neededbackend-stringn/a
2327backend/app/services/zep_tools.py257f"- 总边数: {self.total_edges}",review-neededbackend-stringn/a
2328backend/app/services/zep_tools.py258f"- 当前有效事实: {self.active_count}条",review-neededbackend-stringn/a
2329backend/app/services/zep_tools.py259f"- 历史/过期事实: {self.historical_count}条"review-neededbackend-stringn/a
2330backend/app/services/zep_tools.py262# 当前有效的事实(完整输出,不截断)deliberatebackend-commentn/a
2331backend/app/services/zep_tools.py264text_parts.append(f"\n### 【当前有效事实】(模拟结果原文)")review-neededbackend-stringn/a
2332backend/app/services/zep_tools.py268# 历史/过期事实(完整输出,不截断)deliberatebackend-commentn/a
2333backend/app/services/zep_tools.py270text_parts.append(f"\n### 【历史/过期事实】(演变过程记录)")review-neededbackend-stringn/a
2334backend/app/services/zep_tools.py274# 关键实体(完整输出,不截断)deliberatebackend-commentn/a
2335backend/app/services/zep_tools.py276text_parts.append(f"\n### 【涉及实体】")review-neededbackend-stringn/a
2336backend/app/services/zep_tools.py278entity_type = next((l for l in node.labels if l not in ["Entity", "Node"]), "实体")review-neededbackend-stringn/a
2337backend/app/services/zep_tools.py286"""单个Agent的采访结果"""deliberatebackend-docstringn/a
2338backend/app/services/zep_tools.py288agent_role: str # 角色类型(如:学生、教师、媒体等)deliberatebackend-docstringn/a
2339backend/app/services/zep_tools.py289agent_bio: str # 简介deliberatebackend-docstringn/a
2340backend/app/services/zep_tools.py290question: str # 采访问题deliberatebackend-docstringn/a
2341backend/app/services/zep_tools.py291response: str # 采访回答deliberatebackend-docstringn/a
2342backend/app/services/zep_tools.py292key_quotes: List[str] = field(default_factory=list) # 关键引言deliberatebackend-docstringn/a
2343backend/app/services/zep_tools.py306# 显示完整的agent_bio不截断deliberatebackend-commentn/a
2344backend/app/services/zep_tools.py307text += f"_简介: {self.agent_bio}_\n\n"review-neededbackend-stringn/a
2345backend/app/services/zep_tools.py311text += "\n**关键引言:**\n"review-neededbackend-stringn/a
2346backend/app/services/zep_tools.py313# 清理各种引号deliberatebackend-commentn/a
2347backend/app/services/zep_tools.py317# 去掉开头的标点deliberatebackend-commentn/a
2348backend/app/services/zep_tools.py320# 过滤包含问题编号的垃圾内容问题1-9deliberatebackend-commentn/a
2349backend/app/services/zep_tools.py328# 截断过长内容(按句号截断,而非硬截断)deliberatebackend-commentn/a
2350backend/app/services/zep_tools.py343采访结果 (Interview)deliberatebackend-docstringn/a
2351backend/app/services/zep_tools.py344包含多个模拟Agent的采访回答deliberatebackend-docstringn/a
2352backend/app/services/zep_tools.py346interview_topic: str # 采访主题deliberatebackend-docstringn/a
2353backend/app/services/zep_tools.py347interview_questions: List[str] # 采访问题列表deliberatebackend-docstringn/a
2354backend/app/services/zep_tools.py349# 采访选择的Agentdeliberatebackend-commentn/a
2355backend/app/services/zep_tools.py351# 各Agent的采访回答deliberatebackend-commentn/a
2356backend/app/services/zep_tools.py354# 选择Agent的理由deliberatebackend-commentn/a
2357backend/app/services/zep_tools.py356# 整合后的采访摘要deliberatebackend-commentn/a
2358backend/app/services/zep_tools.py359# 统计deliberatebackend-commentn/a
2359backend/app/services/zep_tools.py376"""转换为详细的文本格式供LLM理解和报告引用"""deliberatebackend-docstringn/a
2360backend/app/services/zep_tools.py378"## 深度采访报告",review-neededbackend-stringn/a
2361backend/app/services/zep_tools.py379f"**采访主题:** {self.interview_topic}",review-neededbackend-stringn/a
2362backend/app/services/zep_tools.py380f"**采访人数:** {self.interviewed_count} / {self.total_agents} 位模拟Agent",review-neededbackend-stringn/a
2363backend/app/services/zep_tools.py381"\n### 采访对象选择理由",review-neededbackend-stringn/a
2364backend/app/services/zep_tools.py382self.selection_reasoning or "(自动选择)",review-neededbackend-stringn/a
2365backend/app/services/zep_tools.py384"\n### 采访实录",review-neededbackend-stringn/a
2366backend/app/services/zep_tools.py389text_parts.append(f"\n#### 采访 #{i}: {interview.agent_name}")review-neededbackend-stringn/a
2367backend/app/services/zep_tools.py393text_parts.append("(无采访记录)\n\n---")review-neededbackend-stringn/a
2368backend/app/services/zep_tools.py395text_parts.append("\n### 采访摘要与核心观点")review-neededbackend-stringn/a
2369backend/app/services/zep_tools.py396text_parts.append(self.summary or "(无摘要)")review-neededbackend-stringn/a
2370backend/app/services/zep_tools.py403Zep检索工具服务deliberatebackend-docstringn/a
2371backend/app/services/zep_tools.py405【核心检索工具 - 优化后】deliberatebackend-docstringn/a
2372backend/app/services/zep_tools.py4061. insight_forge - 深度洞察检索(最强大,自动生成子问题,多维度检索)deliberatebackend-docstringn/a
2373backend/app/services/zep_tools.py4072. panorama_search - 广度搜索(获取全貌,包括过期内容)deliberatebackend-docstringn/a
2374backend/app/services/zep_tools.py4083. quick_search - 简单搜索(快速检索)deliberatebackend-docstringn/a
2375backend/app/services/zep_tools.py4094. interview_agents - 深度采访采访模拟Agent获取多视角观点deliberatebackend-docstringn/a
2376backend/app/services/zep_tools.py411【基础工具】deliberatebackend-docstringn/a
2377backend/app/services/zep_tools.py412- search_graph - 图谱语义搜索deliberatebackend-docstringn/a
2378backend/app/services/zep_tools.py413- get_all_nodes - 获取图谱所有节点deliberatebackend-docstringn/a
2379backend/app/services/zep_tools.py414- get_all_edges - 获取图谱所有边(含时间信息)deliberatebackend-docstringn/a
2380backend/app/services/zep_tools.py415- get_node_detail - 获取节点详细信息deliberatebackend-docstringn/a
2381backend/app/services/zep_tools.py416- get_node_edges - 获取节点相关的边deliberatebackend-docstringn/a
2382backend/app/services/zep_tools.py417- get_entities_by_type - 按类型获取实体deliberatebackend-docstringn/a
2383backend/app/services/zep_tools.py418- get_entity_summary - 获取实体的关系摘要deliberatebackend-docstringn/a
2384backend/app/services/zep_tools.py421# 重试配置deliberatebackend-commentn/a
2385backend/app/services/zep_tools.py427# LLM客户端用于InsightForge生成子问题deliberatebackend-commentn/a
2386backend/app/services/zep_tools.py433"""延迟初始化LLM客户端"""deliberatebackend-docstringn/a
2387backend/app/services/zep_tools.py439"""带重试机制的API调用自动处理429限速"""deliberatebackend-docstringn/a
2388backend/app/services/zep_tools.py450# 检测429限速错误使用retry-after头部的等待时间deliberatebackend-commentn/a
2389backend/app/services/zep_tools.py479图谱语义搜索deliberatebackend-docstringn/a
2390backend/app/services/zep_tools.py481使用混合搜索(语义+BM25在图谱中搜索相关信息。deliberatebackend-docstringn/a
2391backend/app/services/zep_tools.py482如果Zep Cloud的search API不可用则降级为本地关键词匹配。deliberatebackend-docstringn/a
2392backend/app/services/zep_tools.py485graph_id: 图谱ID (Standalone Graph)deliberatebackend-docstringn/a
2393backend/app/services/zep_tools.py486query: 搜索查询deliberatebackend-docstringn/a
2394backend/app/services/zep_tools.py487limit: 返回结果数量deliberatebackend-docstringn/a
2395backend/app/services/zep_tools.py488scope: 搜索范围,"edges" 或 "nodes"review-neededbackend-stringn/a
2396backend/app/services/zep_tools.py491SearchResult: 搜索结果deliberatebackend-docstringn/a
2397backend/app/services/zep_tools.py495# 尝试使用Zep Cloud Search APIdeliberatebackend-commentn/a
2398backend/app/services/zep_tools.py504operation_name=f"图谱搜索(graph={graph_id})"review-neededbackend-stringn/a
2399backend/app/services/zep_tools.py511# 解析边搜索结果deliberatebackend-commentn/a
2400backend/app/services/zep_tools.py524# 解析节点搜索结果deliberatebackend-commentn/a
2401backend/app/services/zep_tools.py533# 节点摘要也算作事实deliberatebackend-commentn/a
2402backend/app/services/zep_tools.py549# 降级:使用本地关键词匹配搜索deliberatebackend-commentn/a
2403backend/app/services/zep_tools.py560本地关键词匹配搜索作为Zep Search API的降级方案deliberatebackend-docstringn/a
2404backend/app/services/zep_tools.py562获取所有边/节点,然后在本地进行关键词匹配deliberatebackend-docstringn/a
2405backend/app/services/zep_tools.py565graph_id: 图谱IDdeliberatebackend-docstringn/a
2406backend/app/services/zep_tools.py566query: 搜索查询deliberatebackend-docstringn/a
2407backend/app/services/zep_tools.py567limit: 返回结果数量deliberatebackend-docstringn/a
2408backend/app/services/zep_tools.py568scope: 搜索范围deliberatebackend-docstringn/a
2409backend/app/services/zep_tools.py571SearchResult: 搜索结果deliberatebackend-docstringn/a
2410backend/app/services/zep_tools.py579# 提取查询关键词(简单分词)deliberatebackend-commentn/a
2411backend/app/services/zep_tools.py584"""计算文本与查询的匹配分数"""deliberatebackend-docstringn/a
2412backend/app/services/zep_tools.py588# 完全匹配查询deliberatebackend-commentn/a
2413backend/app/services/zep_tools.py591# 关键词匹配deliberatebackend-commentn/a
2414backend/app/services/zep_tools.py600# 获取所有边并匹配deliberatebackend-commentn/a
2415backend/app/services/zep_tools.py608# 按分数排序deliberatebackend-commentn/a
2416backend/app/services/zep_tools.py623# 获取所有节点并匹配deliberatebackend-commentn/a
2417backend/app/services/zep_tools.py658获取图谱的所有节点(分页获取)deliberatebackend-docstringn/a
2418backend/app/services/zep_tools.py661graph_id: 图谱IDdeliberatebackend-docstringn/a
2419backend/app/services/zep_tools.py664节点列表deliberatebackend-docstringn/a
2420backend/app/services/zep_tools.py686获取图谱的所有边(分页获取,包含时间信息)deliberatebackend-docstringn/a
2421backend/app/services/zep_tools.py689graph_id: 图谱IDdeliberatebackend-docstringn/a
2422backend/app/services/zep_tools.py690include_temporal: 是否包含时间信息默认Truedeliberatebackend-docstringn/a
2423backend/app/services/zep_tools.py693边列表包含created_at, valid_at, invalid_at, expired_atdeliberatebackend-docstringn/a
2424backend/app/services/zep_tools.py710# 添加时间信息deliberatebackend-commentn/a
2425backend/app/services/zep_tools.py724获取单个节点的详细信息deliberatebackend-docstringn/a
2426backend/app/services/zep_tools.py727node_uuid: 节点UUIDdeliberatebackend-docstringn/a
2427backend/app/services/zep_tools.py730节点信息或Nonedeliberatebackend-docstringn/a
2428backend/app/services/zep_tools.py737operation_name=f"获取节点详情(uuid={node_uuid[:8]}...)"review-neededbackend-stringn/a
2429backend/app/services/zep_tools.py756获取节点相关的所有边deliberatebackend-docstringn/a
2430backend/app/services/zep_tools.py758通过获取图谱所有边,然后过滤出与指定节点相关的边deliberatebackend-docstringn/a
2431backend/app/services/zep_tools.py761graph_id: 图谱IDdeliberatebackend-docstringn/a
2432backend/app/services/zep_tools.py762node_uuid: 节点UUIDdeliberatebackend-docstringn/a
2433backend/app/services/zep_tools.py765边列表deliberatebackend-docstringn/a
2434backend/app/services/zep_tools.py770# 获取图谱所有边,然后过滤deliberatebackend-commentn/a
2435backend/app/services/zep_tools.py775# 检查边是否与指定节点相关(作为源或目标)deliberatebackend-commentn/a
2436backend/app/services/zep_tools.py792按类型获取实体deliberatebackend-docstringn/a
2437backend/app/services/zep_tools.py795graph_id: 图谱IDdeliberatebackend-docstringn/a
2438backend/app/services/zep_tools.py796entity_type: 实体类型(如 Student, PublicFigure 等)deliberatebackend-docstringn/a
2439backend/app/services/zep_tools.py799符合类型的实体列表deliberatebackend-docstringn/a
2440backend/app/services/zep_tools.py807# 检查labels是否包含指定类型deliberatebackend-commentn/a
2441backend/app/services/zep_tools.py820获取指定实体的关系摘要deliberatebackend-docstringn/a
2442backend/app/services/zep_tools.py822搜索与该实体相关的所有信息,并生成摘要deliberatebackend-docstringn/a
2443backend/app/services/zep_tools.py825graph_id: 图谱IDdeliberatebackend-docstringn/a
2444backend/app/services/zep_tools.py826entity_name: 实体名称deliberatebackend-docstringn/a
2445backend/app/services/zep_tools.py829实体摘要信息deliberatebackend-docstringn/a
2446backend/app/services/zep_tools.py833# 先搜索该实体相关的信息deliberatebackend-commentn/a
2447backend/app/services/zep_tools.py840# 尝试在所有节点中找到该实体deliberatebackend-commentn/a
2448backend/app/services/zep_tools.py850# 传入graph_id参数deliberatebackend-commentn/a
2449backend/app/services/zep_tools.py863获取图谱的统计信息deliberatebackend-docstringn/a
2450backend/app/services/zep_tools.py866graph_id: 图谱IDdeliberatebackend-docstringn/a
2451backend/app/services/zep_tools.py869统计信息deliberatebackend-docstringn/a
2452backend/app/services/zep_tools.py876# 统计实体类型分布deliberatebackend-commentn/a
2453backend/app/services/zep_tools.py883# 统计关系类型分布deliberatebackend-commentn/a
2454backend/app/services/zep_tools.py903获取模拟相关的上下文信息deliberatebackend-docstringn/a
2455backend/app/services/zep_tools.py905综合搜索与模拟需求相关的所有信息deliberatebackend-docstringn/a
2456backend/app/services/zep_tools.py908graph_id: 图谱IDdeliberatebackend-docstringn/a
2457backend/app/services/zep_tools.py909simulation_requirement: 模拟需求描述deliberatebackend-docstringn/a
2458backend/app/services/zep_tools.py910limit: 每类信息的数量限制deliberatebackend-docstringn/a
2459backend/app/services/zep_tools.py913模拟上下文信息deliberatebackend-docstringn/a
2460backend/app/services/zep_tools.py917# 搜索与模拟需求相关的信息deliberatebackend-commentn/a
2461backend/app/services/zep_tools.py924# 获取图谱统计deliberatebackend-commentn/a
2462backend/app/services/zep_tools.py927# 获取所有实体节点deliberatebackend-commentn/a
2463backend/app/services/zep_tools.py930# 筛选有实际类型的实体非纯Entity节点deliberatebackend-commentn/a
2464backend/app/services/zep_tools.py945"entities": entities[:limit], # 限制数量review-neededbackend-stringn/a
2465backend/app/services/zep_tools.py949# ========== 核心检索工具(优化后) ==========deliberatebackend-commentn/a
2466backend/app/services/zep_tools.py960【InsightForge - 深度洞察检索】deliberatebackend-docstringn/a
2467backend/app/services/zep_tools.py962最强大的混合检索函数,自动分解问题并多维度检索:deliberatebackend-docstringn/a
2468backend/app/services/zep_tools.py9631. 使用LLM将问题分解为多个子问题deliberatebackend-docstringn/a
2469backend/app/services/zep_tools.py9642. 对每个子问题进行语义搜索deliberatebackend-docstringn/a
2470backend/app/services/zep_tools.py9653. 提取相关实体并获取其详细信息deliberatebackend-docstringn/a
2471backend/app/services/zep_tools.py9664. 追踪关系链deliberatebackend-docstringn/a
2472backend/app/services/zep_tools.py9675. 整合所有结果,生成深度洞察deliberatebackend-docstringn/a
2473backend/app/services/zep_tools.py970graph_id: 图谱IDdeliberatebackend-docstringn/a
2474backend/app/services/zep_tools.py971query: 用户问题deliberatebackend-docstringn/a
2475backend/app/services/zep_tools.py972simulation_requirement: 模拟需求描述deliberatebackend-docstringn/a
2476backend/app/services/zep_tools.py973report_context: 报告上下文(可选,用于更精准的子问题生成)deliberatebackend-docstringn/a
2477backend/app/services/zep_tools.py974max_sub_queries: 最大子问题数量deliberatebackend-docstringn/a
2478backend/app/services/zep_tools.py977InsightForgeResult: 深度洞察检索结果deliberatebackend-docstringn/a
2479backend/app/services/zep_tools.py987# Step 1: 使用LLM生成子问题deliberatebackend-commentn/a
2480backend/app/services/zep_tools.py997# Step 2: 对每个子问题进行语义搜索deliberatebackend-commentn/a
2481backend/app/services/zep_tools.py1017# 对原始问题也进行搜索deliberatebackend-commentn/a
2482backend/app/services/zep_tools.py1032# Step 3: 从边中提取相关实体UUID只获取这些实体的信息不获取全部节点deliberatebackend-commentn/a
2483backend/app/services/zep_tools.py1043# 获取所有相关实体的详情(不限制数量,完整输出)deliberatebackend-commentn/a
2484backend/app/services/zep_tools.py1045node_map = {} # 用于后续关系链构建deliberatebackend-docstringn/a
2485backend/app/services/zep_tools.py1047for uuid in list(entity_uuids): # 处理所有实体,不截断deliberatebackend-docstringn/a
2486backend/app/services/zep_tools.py1051# 单独获取每个相关节点的信息deliberatebackend-commentn/a
2487backend/app/services/zep_tools.py1055entity_type = next((l for l in node.labels if l not in ["Entity", "Node"]), "实体")review-neededbackend-stringn/a
2488backend/app/services/zep_tools.py1057# 获取该实体相关的所有事实(不截断)deliberatebackend-commentn/a
2489backend/app/services/zep_tools.py1068"related_facts": related_facts # 完整输出,不截断review-neededbackend-stringn/a
2490backend/app/services/zep_tools.py1077# Step 4: 构建所有关系链(不限制数量)deliberatebackend-commentn/a
2491backend/app/services/zep_tools.py1079for edge_data in all_edges: # 处理所有边,不截断deliberatebackend-docstringn/a
2492backend/app/services/zep_tools.py1106使用LLM生成子问题deliberatebackend-docstringn/a
2493backend/app/services/zep_tools.py1108将复杂问题分解为多个可以独立检索的子问题deliberatebackend-docstringn/a
2494backend/app/services/zep_tools.py1110system_prompt = """你是一个专业的问题分析专家。你的任务是将一个复杂问题分解为多个可以在模拟世界中独立观察的子问题。review-neededbackend-stringn/a
2495backend/app/services/zep_tools.py1112要求:deliberatebackend-docstringn/a
2496backend/app/services/zep_tools.py11131. 每个子问题应该足够具体可以在模拟世界中找到相关的Agent行为或事件deliberatebackend-docstringn/a
2497backend/app/services/zep_tools.py11142. 子问题应该覆盖原问题的不同维度(如:谁、什么、为什么、怎么样、何时、何地)deliberatebackend-docstringn/a
2498backend/app/services/zep_tools.py11153. 子问题应该与模拟场景相关deliberatebackend-docstringn/a
2499backend/app/services/zep_tools.py11164. 返回JSON格式{"sub_queries": ["子问题1", "子问题2", ...]}"""review-neededbackend-stringn/a
2500backend/app/services/zep_tools.py1118user_prompt = f"""模拟需求背景:review-neededbackend-stringn/a
2501backend/app/services/zep_tools.py1121{f"报告上下文:{report_context[:500]}" if report_context else ""}review-neededbackend-stringn/a
2502backend/app/services/zep_tools.py1123请将以下问题分解为{max_queries}个子问题:deliberatebackend-docstringn/a
2503backend/app/services/zep_tools.py1126返回JSON格式的子问题列表。"""review-neededbackend-stringn/a
2504backend/app/services/zep_tools.py1138# 确保是字符串列表deliberatebackend-commentn/a
2505backend/app/services/zep_tools.py1143# 降级:返回基于原问题的变体deliberatebackend-commentn/a
2506backend/app/services/zep_tools.py1146f"{query} 的主要参与者",review-neededbackend-stringn/a
2507backend/app/services/zep_tools.py1147f"{query} 的原因和影响",review-neededbackend-stringn/a
2508backend/app/services/zep_tools.py1148f"{query} 的发展过程"review-neededbackend-stringn/a
2509backend/app/services/zep_tools.py1159【PanoramaSearch - 广度搜索】deliberatebackend-docstringn/a
2510backend/app/services/zep_tools.py1161获取全貌视图,包括所有相关内容和历史/过期信息:deliberatebackend-docstringn/a
2511backend/app/services/zep_tools.py11621. 获取所有相关节点deliberatebackend-docstringn/a
2512backend/app/services/zep_tools.py11632. 获取所有边(包括已过期/失效的)deliberatebackend-docstringn/a
2513backend/app/services/zep_tools.py11643. 分类整理当前有效和历史信息deliberatebackend-docstringn/a
2514backend/app/services/zep_tools.py1166这个工具适用于需要了解事件全貌、追踪演变过程的场景。deliberatebackend-docstringn/a
2515backend/app/services/zep_tools.py1169graph_id: 图谱IDdeliberatebackend-docstringn/a
2516backend/app/services/zep_tools.py1170query: 搜索查询(用于相关性排序)deliberatebackend-docstringn/a
2517backend/app/services/zep_tools.py1171include_expired: 是否包含过期内容默认Truedeliberatebackend-docstringn/a
2518backend/app/services/zep_tools.py1172limit: 返回结果数量限制deliberatebackend-docstringn/a
2519backend/app/services/zep_tools.py1175PanoramaResult: 广度搜索结果deliberatebackend-docstringn/a
2520backend/app/services/zep_tools.py1181# 获取所有节点deliberatebackend-commentn/a
2521backend/app/services/zep_tools.py1187# 获取所有边(包含时间信息)deliberatebackend-commentn/a
2522backend/app/services/zep_tools.py1192# 分类事实deliberatebackend-commentn/a
2523backend/app/services/zep_tools.py1200# 为事实添加实体名称deliberatebackend-commentn/a
2524backend/app/services/zep_tools.py1204# 判断是否过期/失效deliberatebackend-commentn/a
2525backend/app/services/zep_tools.py1208# 历史/过期事实,添加时间标记deliberatebackend-commentn/a
2526backend/app/services/zep_tools.py1209valid_at = edge.valid_at or "未知"review-neededbackend-stringn/a
2527backend/app/services/zep_tools.py1210invalid_at = edge.invalid_at or edge.expired_at or "未知"review-neededbackend-stringn/a
2528backend/app/services/zep_tools.py1214# 当前有效事实deliberatebackend-commentn/a
2529backend/app/services/zep_tools.py1217# 基于查询进行相关性排序deliberatebackend-commentn/a
2530backend/app/services/zep_tools.py1231# 排序并限制数量deliberatebackend-commentn/a
2531backend/app/services/zep_tools.py1250【QuickSearch - 简单搜索】deliberatebackend-docstringn/a
2532backend/app/services/zep_tools.py1252快速、轻量级的检索工具:deliberatebackend-docstringn/a
2533backend/app/services/zep_tools.py12531. 直接调用Zep语义搜索deliberatebackend-docstringn/a
2534backend/app/services/zep_tools.py12542. 返回最相关的结果deliberatebackend-docstringn/a
2535backend/app/services/zep_tools.py12553. 适用于简单、直接的检索需求deliberatebackend-docstringn/a
2536backend/app/services/zep_tools.py1258graph_id: 图谱IDdeliberatebackend-docstringn/a
2537backend/app/services/zep_tools.py1259query: 搜索查询deliberatebackend-docstringn/a
2538backend/app/services/zep_tools.py1260limit: 返回结果数量deliberatebackend-docstringn/a
2539backend/app/services/zep_tools.py1263SearchResult: 搜索结果deliberatebackend-docstringn/a
2540backend/app/services/zep_tools.py1267# 直接调用现有的search_graph方法deliberatebackend-commentn/a
2541backend/app/services/zep_tools.py1287【InterviewAgents - 深度采访】deliberatebackend-docstringn/a
2542backend/app/services/zep_tools.py1289调用真实的OASIS采访API采访模拟中正在运行的Agentdeliberatebackend-docstringn/a
2543backend/app/services/zep_tools.py12901. 自动读取人设文件了解所有模拟Agentdeliberatebackend-docstringn/a
2544backend/app/services/zep_tools.py12912. 使用LLM分析采访需求智能选择最相关的Agentdeliberatebackend-docstringn/a
2545backend/app/services/zep_tools.py12923. 使用LLM生成采访问题deliberatebackend-docstringn/a
2546backend/app/services/zep_tools.py12934. 调用 /api/simulation/interview/batch 接口进行真实采访(双平台同时采访)deliberatebackend-docstringn/a
2547backend/app/services/zep_tools.py12945. 整合所有采访结果,生成采访报告deliberatebackend-docstringn/a
2548backend/app/services/zep_tools.py1296【重要】此功能需要模拟环境处于运行状态OASIS环境未关闭deliberatebackend-docstringn/a
2549backend/app/services/zep_tools.py1298【使用场景】deliberatebackend-docstringn/a
2550backend/app/services/zep_tools.py1299- 需要从不同角色视角了解事件看法deliberatebackend-docstringn/a
2551backend/app/services/zep_tools.py1300- 需要收集多方意见和观点deliberatebackend-docstringn/a
2552backend/app/services/zep_tools.py1301- 需要获取模拟Agent的真实回答非LLM模拟deliberatebackend-docstringn/a
2553backend/app/services/zep_tools.py1304simulation_id: 模拟ID用于定位人设文件和调用采访APIdeliberatebackend-docstringn/a
2554backend/app/services/zep_tools.py1305interview_requirement: 采访需求描述(非结构化,如"了解学生对事件的看法"review-neededbackend-stringn/a
2555backend/app/services/zep_tools.py1306simulation_requirement: 模拟需求背景(可选)deliberatebackend-docstringn/a
2556backend/app/services/zep_tools.py1307max_agents: 最多采访的Agent数量deliberatebackend-docstringn/a
2557backend/app/services/zep_tools.py1308custom_questions: 自定义采访问题(可选,若不提供则自动生成)deliberatebackend-docstringn/a
2558backend/app/services/zep_tools.py1311InterviewResult: 采访结果deliberatebackend-docstringn/a
2559backend/app/services/zep_tools.py1322# Step 1: 读取人设文件deliberatebackend-commentn/a
2560backend/app/services/zep_tools.py1327result.summary = "未找到可采访的Agent人设文件"review-neededbackend-stringn/a
2561backend/app/services/zep_tools.py1333# Step 2: 使用LLM选择要采访的Agent返回agent_id列表deliberatebackend-commentn/a
2562backend/app/services/zep_tools.py1345# Step 3: 生成采访问题(如果没有提供)deliberatebackend-commentn/a
2563backend/app/services/zep_tools.py1354# 将问题合并为一个采访promptdeliberatebackend-commentn/a
2564backend/app/services/zep_tools.py1357# 添加优化前缀约束Agent回复格式deliberatebackend-commentn/a
2565backend/app/services/zep_tools.py1359"你正在接受一次采访。请结合你的人设、所有的过往记忆与行动,"review-neededbackend-stringn/a
2566backend/app/services/zep_tools.py1360"以纯文本方式直接回答以下问题。\n"review-neededbackend-stringn/a
2567backend/app/services/zep_tools.py1361"回复要求:\n"review-neededbackend-stringn/a
2568backend/app/services/zep_tools.py1362"1. 直接用自然语言回答,不要调用任何工具\n"review-neededbackend-stringn/a
2569backend/app/services/zep_tools.py1363"2. 不要返回JSON格式或工具调用格式\n"review-neededbackend-stringn/a
2570backend/app/services/zep_tools.py1364"3. 不要使用Markdown标题如#、##、###\n"review-neededbackend-stringn/a
2571backend/app/services/zep_tools.py1365"4. 按问题编号逐一回答每个回答以「问题X」开头X为问题编号\n"review-neededbackend-stringn/a
2572backend/app/services/zep_tools.py1366"5. 每个问题的回答之间用空行分隔\n"review-neededbackend-stringn/a
2573backend/app/services/zep_tools.py1367"6. 回答要有实质内容每个问题至少回答2-3句话\n\n"review-neededbackend-stringn/a
2574backend/app/services/zep_tools.py1371# Step 4: 调用真实的采访API不指定platform默认双平台同时采访deliberatebackend-commentn/a
2575backend/app/services/zep_tools.py1373# 构建批量采访列表不指定platform双平台采访deliberatebackend-commentn/a
2576backend/app/services/zep_tools.py1378"prompt": optimized_prompt # 使用优化后的promptreview-neededbackend-stringn/a
2577backend/app/services/zep_tools.py1379# 不指定platformAPI会在twitter和reddit两个平台都采访deliberatebackend-commentn/a
2578backend/app/services/zep_tools.py1384# 调用 SimulationRunner 的批量采访方法不传platform双平台采访deliberatebackend-commentn/a
2579backend/app/services/zep_tools.py1388platform=None, # 不指定platform双平台采访deliberatebackend-docstringn/a
2580backend/app/services/zep_tools.py1389timeout=180.0 # 双平台需要更长超时deliberatebackend-docstringn/a
2581backend/app/services/zep_tools.py1394# 检查API调用是否成功deliberatebackend-commentn/a
2582backend/app/services/zep_tools.py1396error_msg = api_result.get("error", "未知错误")review-neededbackend-stringn/a
2583backend/app/services/zep_tools.py1398result.summary = f"采访API调用失败{error_msg}。请检查OASIS模拟环境状态。"review-neededbackend-stringn/a
2584backend/app/services/zep_tools.py1401# Step 5: 解析API返回结果构建AgentInterview对象deliberatebackend-commentn/a
2585backend/app/services/zep_tools.py1402# 双平台模式返回格式: {"twitter_0": {...}, "reddit_0": {...}, "twitter_1": {...}, ...}deliberatebackend-commentn/a
2586backend/app/services/zep_tools.py1409agent_role = agent.get("profession", "未知")review-neededbackend-stringn/a
2587backend/app/services/zep_tools.py1412# 获取该Agent在两个平台的采访结果deliberatebackend-commentn/a
2588backend/app/services/zep_tools.py1419# 清理可能的工具调用 JSON 包裹deliberatebackend-commentn/a
2589backend/app/services/zep_tools.py1423# 始终输出双平台标记deliberatebackend-commentn/a
2590backend/app/services/zep_tools.py1424twitter_text = twitter_response if twitter_response else "(该平台未获得回复)"review-neededbackend-stringn/a
2591backend/app/services/zep_tools.py1425reddit_text = reddit_response if reddit_response else "(该平台未获得回复)"review-neededbackend-stringn/a
2592backend/app/services/zep_tools.py1426response_text = f"【Twitter平台回答】\n{twitter_text}\n\n【Reddit平台回答】\n{reddit_text}"review-neededbackend-stringn/a
2593backend/app/services/zep_tools.py1428# 提取关键引言(从两个平台的回答中)deliberatebackend-commentn/a
2594backend/app/services/zep_tools.py1432# 清理响应文本去掉标记、编号、Markdown 等干扰deliberatebackend-commentn/a
2595backend/app/services/zep_tools.py1436clean_text = re.sub(r'问题\d+[:]\s*', '', clean_text)review-neededbackend-stringn/a
2596backend/app/services/zep_tools.py1439# 策略1: 提取完整的有实质内容的句子deliberatebackend-commentn/a
2597backend/app/services/zep_tools.py1445and not s.strip().startswith(('{', '问题'))review-neededbackend-stringn/a
2598backend/app/services/zep_tools.py1450# 策略2补充: 正确配对的中文引号「」内长文本deliberatebackend-commentn/a
2599backend/app/services/zep_tools.py1459agent_bio=agent_bio[:1000], # 扩大bio长度限制deliberatebackend-docstringn/a
2600backend/app/services/zep_tools.py1469# 模拟环境未运行deliberatebackend-commentn/a
2601backend/app/services/zep_tools.py1471result.summary = f"采访失败:{str(e)}。模拟环境可能已关闭请确保OASIS环境正在运行。"review-neededbackend-stringn/a
2602backend/app/services/zep_tools.py1477result.summary = f"采访过程发生错误:{str(e)}"review-neededbackend-stringn/a
2603backend/app/services/zep_tools.py1480# Step 6: 生成采访摘要deliberatebackend-commentn/a
2604backend/app/services/zep_tools.py1492"""清理 Agent 回复中的 JSON 工具调用包裹,提取实际内容"""deliberatebackend-docstringn/a
2605backend/app/services/zep_tools.py1512"""加载模拟的Agent人设文件"""deliberatebackend-docstringn/a
2606backend/app/services/zep_tools.py1516# 构建人设文件路径deliberatebackend-commentn/a
2607backend/app/services/zep_tools.py1524# 优先尝试读取Reddit JSON格式deliberatebackend-commentn/a
2608backend/app/services/zep_tools.py1535# 尝试读取Twitter CSV格式deliberatebackend-commentn/a
2609backend/app/services/zep_tools.py1542# CSV格式转换为统一格式deliberatebackend-commentn/a
2610backend/app/services/zep_tools.py1548"profession": "未知"review-neededbackend-stringn/a
2611backend/app/services/zep_tools.py1565使用LLM选择要采访的Agentdeliberatebackend-docstringn/a
2612backend/app/services/zep_tools.py1569- selected_agents: 选中Agent的完整信息列表deliberatebackend-docstringn/a
2613backend/app/services/zep_tools.py1570- selected_indices: 选中Agent的索引列表用于API调用deliberatebackend-docstringn/a
2614backend/app/services/zep_tools.py1571- reasoning: 选择理由deliberatebackend-docstringn/a
2615backend/app/services/zep_tools.py1574# 构建Agent摘要列表deliberatebackend-commentn/a
2616backend/app/services/zep_tools.py1580"profession": profile.get("profession", "未知"),review-neededbackend-stringn/a
2617backend/app/services/zep_tools.py1586system_prompt = """你是一个专业的采访策划专家。你的任务是根据采访需求从模拟Agent列表中选择最适合采访的对象。review-neededbackend-stringn/a
2618backend/app/services/zep_tools.py1588选择标准:deliberatebackend-docstringn/a
2619backend/app/services/zep_tools.py15891. Agent的身份/职业与采访主题相关deliberatebackend-docstringn/a
2620backend/app/services/zep_tools.py15902. Agent可能持有独特或有价值的观点deliberatebackend-docstringn/a
2621backend/app/services/zep_tools.py15913. 选择多样化的视角(如:支持方、反对方、中立方、专业人士等)deliberatebackend-docstringn/a
2622backend/app/services/zep_tools.py15924. 优先选择与事件直接相关的角色deliberatebackend-docstringn/a
2623backend/app/services/zep_tools.py1594返回JSON格式deliberatebackend-docstringn/a
2624backend/app/services/zep_tools.py1596"selected_indices": [选中Agent的索引列表],review-neededbackend-stringn/a
2625backend/app/services/zep_tools.py1597"reasoning": "选择理由说明"review-neededbackend-stringn/a
2626backend/app/services/zep_tools.py1600user_prompt = f"""采访需求:review-neededbackend-stringn/a
2627backend/app/services/zep_tools.py1603模拟背景:deliberatebackend-docstringn/a
2628backend/app/services/zep_tools.py1604{simulation_requirement if simulation_requirement else "未提供"}review-neededbackend-stringn/a
2629backend/app/services/zep_tools.py1606可选择的Agent列表共{len(agent_summaries)}个):deliberatebackend-docstringn/a
2630backend/app/services/zep_tools.py1609请选择最多{max_agents}个最适合采访的Agent并说明选择理由。"""review-neededbackend-stringn/a
2631backend/app/services/zep_tools.py1621reasoning = response.get("reasoning", "基于相关性自动选择")review-neededbackend-stringn/a
2632backend/app/services/zep_tools.py1623# 获取选中的Agent完整信息deliberatebackend-commentn/a
2633backend/app/services/zep_tools.py1635# 降级选择前N个deliberatebackend-commentn/a
2634backend/app/services/zep_tools.py1638return selected, indices, "使用默认选择策略"review-neededbackend-stringn/a
2635backend/app/services/zep_tools.py1646"""使用LLM生成采访问题"""deliberatebackend-docstringn/a
2636backend/app/services/zep_tools.py1648agent_roles = [a.get("profession", "未知") for a in selected_agents]review-neededbackend-stringn/a
2637backend/app/services/zep_tools.py1650system_prompt = """你是一个专业的记者/采访者。根据采访需求生成3-5个深度采访问题。review-neededbackend-stringn/a
2638backend/app/services/zep_tools.py1652问题要求:deliberatebackend-docstringn/a
2639backend/app/services/zep_tools.py16531. 开放性问题,鼓励详细回答deliberatebackend-docstringn/a
2640backend/app/services/zep_tools.py16542. 针对不同角色可能有不同答案deliberatebackend-docstringn/a
2641backend/app/services/zep_tools.py16553. 涵盖事实、观点、感受等多个维度deliberatebackend-docstringn/a
2642backend/app/services/zep_tools.py16564. 语言自然,像真实采访一样deliberatebackend-docstringn/a
2643backend/app/services/zep_tools.py16575. 每个问题控制在50字以内简洁明了deliberatebackend-docstringn/a
2644backend/app/services/zep_tools.py16586. 直接提问,不要包含背景说明或前缀deliberatebackend-docstringn/a
2645backend/app/services/zep_tools.py1660返回JSON格式{"questions": ["问题1", "问题2", ...]}"""review-neededbackend-stringn/a
2646backend/app/services/zep_tools.py1662user_prompt = f"""采访需求:{interview_requirement}review-neededbackend-stringn/a
2647backend/app/services/zep_tools.py1664模拟背景:{simulation_requirement if simulation_requirement else "未提供"}review-neededbackend-stringn/a
2648backend/app/services/zep_tools.py1666采访对象角色:{', '.join(agent_roles)}review-neededbackend-stringn/a
2649backend/app/services/zep_tools.py1668请生成3-5个采访问题。"""review-neededbackend-stringn/a
2650backend/app/services/zep_tools.py1679return response.get("questions", [f"关于{interview_requirement},您有什么看法?"])review-neededbackend-stringn/a
2651backend/app/services/zep_tools.py1684f"关于{interview_requirement},您的观点是什么?",review-neededbackend-stringn/a
2652backend/app/services/zep_tools.py1685"这件事对您或您所代表的群体有什么影响?",review-neededbackend-stringn/a
2653backend/app/services/zep_tools.py1686"您认为应该如何解决或改进这个问题?"review-neededbackend-stringn/a
2654backend/app/services/zep_tools.py1694"""生成采访摘要"""deliberatebackend-docstringn/a
2655backend/app/services/zep_tools.py1697return "未完成任何采访"review-neededbackend-stringn/a
2656backend/app/services/zep_tools.py1699# 收集所有采访内容deliberatebackend-commentn/a
2657backend/app/services/zep_tools.py1704system_prompt = """你是一个专业的新闻编辑。请根据多位受访者的回答,生成一份采访摘要。review-neededbackend-stringn/a
2658backend/app/services/zep_tools.py1706摘要要求:deliberatebackend-docstringn/a
2659backend/app/services/zep_tools.py17071. 提炼各方主要观点deliberatebackend-docstringn/a
2660backend/app/services/zep_tools.py17082. 指出观点的共识和分歧deliberatebackend-docstringn/a
2661backend/app/services/zep_tools.py17093. 突出有价值的引言deliberatebackend-docstringn/a
2662backend/app/services/zep_tools.py17104. 客观中立,不偏袒任何一方deliberatebackend-docstringn/a
2663backend/app/services/zep_tools.py17115. 控制在1000字内deliberatebackend-docstringn/a
2664backend/app/services/zep_tools.py1713格式约束(必须遵守):deliberatebackend-docstringn/a
2665backend/app/services/zep_tools.py1714- 使用纯文本段落,用空行分隔不同部分deliberatebackend-docstringn/a
2666backend/app/services/zep_tools.py1715- 不要使用Markdown标题如#、##、###deliberatebackend-docstringn/a
2667backend/app/services/zep_tools.py1716- 不要使用分割线(如---、***deliberatebackend-docstringn/a
2668backend/app/services/zep_tools.py1717- 引用受访者原话时使用中文引号「」deliberatebackend-docstringn/a
2669backend/app/services/zep_tools.py1718- 可以使用**加粗**标记关键词但不要使用其他Markdown语法"""review-neededbackend-stringn/a
2670backend/app/services/zep_tools.py1720user_prompt = f"""采访主题:{interview_requirement}review-neededbackend-stringn/a
2671backend/app/services/zep_tools.py1722采访内容:deliberatebackend-docstringn/a
2672backend/app/services/zep_tools.py1725请生成采访摘要。"""review-neededbackend-stringn/a
2673backend/app/services/zep_tools.py1740# 降级:简单拼接deliberatebackend-commentn/a
2674backend/app/services/zep_tools.py1741return f"共采访了{len(interviews)}位受访者,包括:" + "、".join([i.agent_name for i in interviews])review-neededbackend-stringn/a
2675backend/app/utils/__init__.py2工具模块deliberatebackend-docstringn/a
2676backend/app/utils/file_parser.py2文件解析工具deliberatebackend-docstringn/a
2677backend/app/utils/file_parser.py3支持PDF、Markdown、TXT文件的文本提取deliberatebackend-docstringn/a
2678backend/app/utils/file_parser.py13读取文本文件UTF-8失败时自动探测编码。deliberatebackend-docstringn/a
2679backend/app/utils/file_parser.py15采用多级回退策略:deliberatebackend-docstringn/a
2680backend/app/utils/file_parser.py161. 首先尝试 UTF-8 解码deliberatebackend-docstringn/a
2681backend/app/utils/file_parser.py172. 使用 charset_normalizer 检测编码deliberatebackend-docstringn/a
2682backend/app/utils/file_parser.py183. 回退到 chardet 检测编码deliberatebackend-docstringn/a
2683backend/app/utils/file_parser.py194. 最终使用 UTF-8 + errors='replace' 兜底review-neededbackend-stringn/a
2684backend/app/utils/file_parser.py22file_path: 文件路径deliberatebackend-docstringn/a
2685backend/app/utils/file_parser.py25解码后的文本内容deliberatebackend-docstringn/a
2686backend/app/utils/file_parser.py29# 首先尝试 UTF-8deliberatebackend-commentn/a
2687backend/app/utils/file_parser.py35# 尝试使用 charset_normalizer 检测编码deliberatebackend-commentn/a
2688backend/app/utils/file_parser.py45# 回退到 chardetdeliberatebackend-commentn/a
2689backend/app/utils/file_parser.py54# 最终兜底:使用 UTF-8 + replacedeliberatebackend-commentn/a
2690backend/app/utils/file_parser.py62"""文件解析器"""deliberatebackend-docstringn/a
2691backend/app/utils/file_parser.py69从文件中提取文本deliberatebackend-docstringn/a
2692backend/app/utils/file_parser.py72file_path: 文件路径deliberatebackend-docstringn/a
2693backend/app/utils/file_parser.py75提取的文本内容deliberatebackend-docstringn/a
2694backend/app/utils/file_parser.py80raise FileNotFoundError(f"文件不存在: {file_path}")review-neededbackend-stringn/a
2695backend/app/utils/file_parser.py85raise ValueError(f"不支持的文件格式: {suffix}")review-neededbackend-stringn/a
2696backend/app/utils/file_parser.py94raise ValueError(f"无法处理的文件格式: {suffix}")review-neededbackend-stringn/a
2697backend/app/utils/file_parser.py98"""从PDF提取文本"""deliberatebackend-docstringn/a
2698backend/app/utils/file_parser.py102raise ImportError("需要安装PyMuPDF: pip install PyMuPDF")review-neededbackend-stringn/a
2699backend/app/utils/file_parser.py115"""从Markdown提取文本支持自动编码检测"""deliberatebackend-docstringn/a
2700backend/app/utils/file_parser.py120"""从TXT提取文本支持自动编码检测"""deliberatebackend-docstringn/a
2701backend/app/utils/file_parser.py126从多个文件提取文本并合并deliberatebackend-docstringn/a
2702backend/app/utils/file_parser.py129file_paths: 文件路径列表deliberatebackend-docstringn/a
2703backend/app/utils/file_parser.py132合并后的文本deliberatebackend-docstringn/a
2704backend/app/utils/file_parser.py140all_texts.append(f"=== 文档 {i}: {filename} ===\n{text}")review-neededbackend-stringn/a
2705backend/app/utils/file_parser.py142all_texts.append(f"=== 文档 {i}: {file_path} (提取失败: {str(e)}) ===")review-neededbackend-stringn/a
2706backend/app/utils/file_parser.py153将文本分割成小块deliberatebackend-docstringn/a
2707backend/app/utils/file_parser.py156text: 原始文本deliberatebackend-docstringn/a
2708backend/app/utils/file_parser.py157chunk_size: 每块的字符数deliberatebackend-docstringn/a
2709backend/app/utils/file_parser.py158overlap: 重叠字符数deliberatebackend-docstringn/a
2710backend/app/utils/file_parser.py161文本块列表deliberatebackend-docstringn/a
2711backend/app/utils/file_parser.py172# 尝试在句子边界处分割deliberatebackend-commentn/a
2712backend/app/utils/file_parser.py174# 查找最近的句子结束符deliberatebackend-commentn/a
2713backend/app/utils/file_parser.py185# 下一个块从重叠位置开始deliberatebackend-commentn/a
2714backend/app/utils/llm_client.py2LLM客户端封装deliberatebackend-docstringn/a
2715backend/app/utils/llm_client.py3统一使用OpenAI格式调用deliberatebackend-docstringn/a
2716backend/app/utils/llm_client.py16"""LLM客户端"""deliberatebackend-docstringn/a
2717backend/app/utils/llm_client.py29raise ValueError("LLM_API_KEY 未配置")review-neededbackend-stringn/a
2718backend/app/utils/llm_client.py41发送聊天请求deliberatebackend-docstringn/a
2719backend/app/utils/llm_client.py44messages: 消息列表deliberatebackend-docstringn/a
2720backend/app/utils/llm_client.py45temperature: 温度参数deliberatebackend-docstringn/a
2721backend/app/utils/llm_client.py46max_tokens: 最大token数deliberatebackend-docstringn/a
2722backend/app/utils/llm_client.py47response_format: 响应格式如JSON模式deliberatebackend-docstringn/a
2723backend/app/utils/llm_client.py50模型响应文本deliberatebackend-docstringn/a
2724backend/app/utils/llm_client.py64# 部分模型如MiniMax M2.5会在content中包含<think>思考内容,需要移除deliberatebackend-commentn/a
2725backend/app/utils/llm_client.py82# 清理markdown代码块标记deliberatebackend-commentn/a
2726backend/app/utils/llm_client.py93raise ValueError(f"LLM返回的JSON格式无效: {cleaned_response}")review-neededbackend-stringn/a
2727backend/app/utils/locale.py96return lang_config.get('llmInstruction', '请使用中文回答。')review-neededbackend-stringn/a
2728backend/app/utils/logger.py2日志配置模块deliberatebackend-docstringLogs
2729backend/app/utils/logger.py3提供统一的日志管理,同时输出到控制台和文件deliberatebackend-docstringLogs
2730backend/app/utils/logger.py15确保 stdout/stderr 使用 UTF-8 编码deliberatebackend-docstringLogs
2731backend/app/utils/logger.py16解决 Windows 控制台中文乱码问题deliberatebackend-docstringLogs
2732backend/app/utils/logger.py19# Windows 下重新配置标准输出为 UTF-8deliberatebackend-commentLogs
2733backend/app/utils/logger.py26# 日志目录deliberatebackend-commentLogs
2734backend/app/utils/logger.py32设置日志器deliberatebackend-docstringLogs
2735backend/app/utils/logger.py35name: 日志器名称deliberatebackend-docstringLogs
2736backend/app/utils/logger.py36level: 日志级别deliberatebackend-docstringLogs
2737backend/app/utils/logger.py39配置好的日志器deliberatebackend-docstringLogs
2738backend/app/utils/logger.py41# 确保日志目录存在deliberatebackend-commentLogs
2739backend/app/utils/logger.py44# 创建日志器deliberatebackend-commentLogs
2740backend/app/utils/logger.py48# 阻止日志向上传播到根 logger避免重复输出deliberatebackend-commentLogs
2741backend/app/utils/logger.py51# 如果已经有处理器,不重复添加deliberatebackend-commentLogs
2742backend/app/utils/logger.py55# 日志格式deliberatebackend-commentLogs
2743backend/app/utils/logger.py66# 1. 文件处理器 - 详细日志(按日期命名,带轮转)deliberatebackend-commentLogs
2744backend/app/utils/logger.py77# 2. 控制台处理器 - 简洁日志INFO及以上deliberatebackend-commentLogs
2745backend/app/utils/logger.py78# 确保 Windows 下使用 UTF-8 编码,避免中文乱码deliberatebackend-commentLogs
2746backend/app/utils/logger.py84# 添加处理器deliberatebackend-commentLogs
2747backend/app/utils/logger.py93获取日志器(如果不存在则创建)deliberatebackend-docstringLogs
2748backend/app/utils/logger.py96name: 日志器名称deliberatebackend-docstringLogs
2749backend/app/utils/logger.py99日志器实例deliberatebackend-docstringLogs
2750backend/app/utils/logger.py107# 创建默认日志器deliberatebackend-commentLogs
2751backend/app/utils/logger.py111# 便捷方法deliberatebackend-commentLogs
2752backend/app/utils/retry.py2API调用重试机制deliberatebackend-docstringLogs
2753backend/app/utils/retry.py3用于处理LLM等外部API调用的重试逻辑deliberatebackend-docstringLogs
2754backend/app/utils/retry.py25带指数退避的重试装饰器deliberatebackend-docstringLogs
2755backend/app/utils/retry.py28max_retries: 最大重试次数deliberatebackend-docstringLogs
2756backend/app/utils/retry.py29initial_delay: 初始延迟(秒)deliberatebackend-docstringLogs
2757backend/app/utils/retry.py30max_delay: 最大延迟(秒)deliberatebackend-docstringLogs
2758backend/app/utils/retry.py31backoff_factor: 退避因子deliberatebackend-docstringLogs
2759backend/app/utils/retry.py32jitter: 是否添加随机抖动deliberatebackend-docstringLogs
2760backend/app/utils/retry.py33exceptions: 需要重试的异常类型deliberatebackend-docstringLogs
2761backend/app/utils/retry.py34on_retry: 重试时的回调函数 (exception, retry_count)deliberatebackend-docstringLogs
2762backend/app/utils/retry.py55logger.error(f"函数 {func.__name__} 在 {max_retries} 次重试后仍失败: {str(e)}")gapbackend-logLogs
2763backend/app/utils/retry.py58# 计算延迟deliberatebackend-commentLogs
2764backend/app/utils/retry.py64f"函数 {func.__name__} 第 {attempt + 1} 次尝试失败: {str(e)}, "review-neededbackend-stringLogs
2765backend/app/utils/retry.py65f"{current_delay:.1f}秒后重试..."review-neededbackend-stringLogs
2766backend/app/utils/retry.py90异步版本的重试装饰器deliberatebackend-docstringLogs
2767backend/app/utils/retry.py108logger.error(f"异步函数 {func.__name__} 在 {max_retries} 次重试后仍失败: {str(e)}")gapbackend-logLogs
2768backend/app/utils/retry.py116f"异步函数 {func.__name__} 第 {attempt + 1} 次尝试失败: {str(e)}, "review-neededbackend-stringLogs
2769backend/app/utils/retry.py117f"{current_delay:.1f}秒后重试..."review-neededbackend-stringLogs
2770backend/app/utils/retry.py134可重试的API客户端封装deliberatebackend-docstringLogs
2771backend/app/utils/retry.py157执行函数调用并在失败时重试deliberatebackend-docstringLogs
2772backend/app/utils/retry.py160func: 要调用的函数deliberatebackend-docstringLogs
2773backend/app/utils/retry.py161*args: 函数参数deliberatebackend-docstringLogs
2774backend/app/utils/retry.py162exceptions: 需要重试的异常类型deliberatebackend-docstringLogs
2775backend/app/utils/retry.py163**kwargs: 函数关键字参数deliberatebackend-docstringLogs
2776backend/app/utils/retry.py166函数返回值deliberatebackend-docstringLogs
2777backend/app/utils/retry.py179logger.error(f"API调用在 {self.max_retries} 次重试后仍失败: {str(e)}")gapbackend-logLogs
2778backend/app/utils/retry.py186f"API调用第 {attempt + 1} 次尝试失败: {str(e)}, "review-neededbackend-stringLogs
2779backend/app/utils/retry.py187f"{current_delay:.1f}秒后重试..."review-neededbackend-stringLogs
2780backend/app/utils/retry.py203批量调用并对每个失败项单独重试deliberatebackend-docstringLogs
2781backend/app/utils/retry.py206items: 要处理的项目列表deliberatebackend-docstringLogs
2782backend/app/utils/retry.py207process_func: 处理函数接收单个item作为参数deliberatebackend-docstringLogs
2783backend/app/utils/retry.py208exceptions: 需要重试的异常类型deliberatebackend-docstringLogs
2784backend/app/utils/retry.py209continue_on_failure: 单项失败后是否继续处理其他项deliberatebackend-docstringLogs
2785backend/app/utils/retry.py212(成功结果列表, 失败项列表)deliberatebackend-docstringLogs
2786backend/app/utils/retry.py227logger.error(f"处理第 {idx + 1} 项失败: {str(e)}")gapbackend-logLogs
2787backend/app/utils/zep_paging.py1"""Zep Graph 分页读取工具。deliberatebackend-docstringn/a
2788backend/app/utils/zep_paging.py3Zep 的 node/edge 列表接口使用 UUID cursor 分页,deliberatebackend-docstringn/a
2789backend/app/utils/zep_paging.py4本模块封装自动翻页逻辑(含单页重试),对调用方透明地返回完整列表。deliberatebackend-docstringn/a
2790backend/app/utils/zep_paging.py33"""单页请求失败时指数退避重试。自动处理429限速。"""deliberatebackend-docstringn/a
2791backend/app/utils/zep_paging.py46# 检测429限速使用retry-after头部指定的等待时间deliberatebackend-commentn/a
2792backend/app/utils/zep_paging.py68"""分页获取图谱节点,最多返回 max_items 条(默认 2000。每页请求自带重试。"""deliberatebackend-docstringn/a
2793backend/app/utils/zep_paging.py113"""分页获取图谱所有边,返回完整列表。每页请求自带重试。"""deliberatebackend-docstringn/a
2794frontend/src/components/Step2EnvSetup.vue680if (newStage === '生成Agent人设' || newStage === 'generating_profiles') {gapfrontend-ui-stringEnv Setup
2795frontend/src/components/Step2EnvSetup.vue682} else if (newStage === '生成模拟配置' || newStage === 'generating_config') {gapfrontend-ui-stringEnv Setup
2796frontend/src/components/Step2EnvSetup.vue689} else if (newStage === '准备模拟脚本' || newStage === 'copying_scripts') {gapfrontend-ui-stringEnv Setup
2797frontend/src/components/Step3Simulation.vue423startError.value = res.error || '启动失败'gapfrontend-ui-stringSimulation
2798frontend/src/components/Step4Report.vue555const queryMatch = text.match(/分析问题:\s*(.+?)(?:\n|$)/)gapfrontend-regex-parserReport
2799frontend/src/components/Step4Report.vue559const reqMatch = text.match(/预测场景:\s*(.+?)(?:\n|$)/)gapfrontend-regex-parserReport
2800frontend/src/components/Step4Report.vue562// Extract counters from the "相关预测事实: X条" format.gapfrontend-ui-stringReport
2801frontend/src/components/Step4Report.vue563const factMatch = text.match(/相关预测事实:\s*(\d+)/)gapfrontend-regex-parserReport
2802frontend/src/components/Step4Report.vue564const entityMatch = text.match(/涉及实体:\s*(\d+)/)gapfrontend-regex-parserReport
2803frontend/src/components/Step4Report.vue565const relMatch = text.match(/关系链:\s*(\d+)/)gapfrontend-regex-parserReport
2804frontend/src/components/Step4Report.vue571const subQSection = text.match(/### 分析的子问题\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2805frontend/src/components/Step4Report.vue578const factsSection = text.match(/### 【关键事实】[\s\S]*?\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2806frontend/src/components/Step4Report.vue588const entitySection = text.match(/### 【核心实体】\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2807frontend/src/components/Step4Report.vue595const summaryMatch = block.match(/摘要:\s*"?(.+?)"?(?:\n|$)/)gapfrontend-regex-parserReport
2808frontend/src/components/Step4Report.vue596const relatedMatch = block.match(/相关事实:\s*(\d+)/)gapfrontend-regex-parserReport
2809frontend/src/components/Step4Report.vue607const relSection = text.match(/### 【关系链】\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2810frontend/src/components/Step4Report.vue636const queryMatch = text.match(/查询:\s*(.+?)(?:\n|$)/)gapfrontend-regex-parserReport
2811frontend/src/components/Step4Report.vue640const nodesMatch = text.match(/总节点数:\s*(\d+)/)gapfrontend-regex-parserReport
2812frontend/src/components/Step4Report.vue641const edgesMatch = text.match(/总边数:\s*(\d+)/)gapfrontend-regex-parserReport
2813frontend/src/components/Step4Report.vue642const activeMatch = text.match(/当前有效事实:\s*(\d+)/)gapfrontend-regex-parserReport
2814frontend/src/components/Step4Report.vue643const histMatch = text.match(/历史\/过期事实:\s*(\d+)/)gapfrontend-regex-parserReport
2815frontend/src/components/Step4Report.vue650const activeSection = text.match(/### 【当前有效事实】[\s\S]*?\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2816frontend/src/components/Step4Report.vue661const histSection = text.match(/### 【历史\/过期事实】[\s\S]*?\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2817frontend/src/components/Step4Report.vue671const entitySection = text.match(/### 【涉及实体】\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2818frontend/src/components/Step4Report.vue700const topicMatch = text.match(/\*\*采访主题:\*\*\s*(.+?)(?:\n|$)/)gapfrontend-regex-parserReport
2819frontend/src/components/Step4Report.vue703// Extract the interview-count line, e.g. "5 / 9 位模拟Agent".gapfrontend-ui-stringReport
2820frontend/src/components/Step4Report.vue704const countMatch = text.match(/\*\*采访人数:\*\*\s*(\d+)\s*\/\s*(\d+)/)gapfrontend-regex-parserReport
2821frontend/src/components/Step4Report.vue712const reasonMatch = text.match(/### 采访对象选择理由\n([\s\S]*?)(?=\n---\n|\n### 采访实录)/)gapfrontend-regex-parserReport
2822frontend/src/components/Step4Report.vue738// Format 2: "- 选择<name>index <i><reason>"gapfrontend-ui-stringReport
2823frontend/src/components/Step4Report.vue740headerMatch = line.match(/^-\s*选择([^(]+)(?:[(]index\s*=?\s*\d+[)])?[:]\s*(.*)/)gapfrontend-regex-parserReport
2824frontend/src/components/Step4Report.vue763} else if (currentName && line.trim() && !line.match(/^未选|^综上|^最终选择/)) {gapfrontend-regex-parserReport
2825frontend/src/components/Step4Report.vue779const interviewBlocks = text.split(/#### 采访 #\d+:/).slice(1)review-neededfrontend-otherReport
2826frontend/src/components/Step4Report.vue795// Extract the title (e.g. "学生", "教育从业者").gapfrontend-ui-stringReport
2827frontend/src/components/Step4Report.vue809const bioMatch = block.match(/_简介:\s*([\s\S]*?)_\n/)gapfrontend-regex-parserReport
2828frontend/src/components/Step4Report.vue832const answerMatch = block.match(/\*\*A:\*\*\s*([\s\S]*?)(?=\*\*关键引言|$)/)gapfrontend-regex-parserReport
2829frontend/src/components/Step4Report.vue837const twitterMatch = answerText.match(/【Twitter平台回答】\n?([\s\S]*?)(?=【Reddit平台回答】|$)/)gapfrontend-regex-parserReport
2830frontend/src/components/Step4Report.vue838const redditMatch = answerText.match(/【Reddit平台回答】\n?([\s\S]*?)$/)gapfrontend-regex-parserReport
2831frontend/src/components/Step4Report.vue850if (interview.redditAnswer && interview.redditAnswer !== '(该平台未获得回复)') {gapfrontend-ui-stringReport
2832frontend/src/components/Step4Report.vue854if (interview.twitterAnswer && interview.twitterAnswer !== '(该平台未获得回复)') {gapfrontend-ui-stringReport
2833frontend/src/components/Step4Report.vue864const quotesMatch = block.match(/\*\*关键引言:\*\*\n([\s\S]*?)(?=\n---|\n####|$)/)gapfrontend-regex-parserReport
2834frontend/src/components/Step4Report.vue886const summaryMatch = text.match(/### 采访摘要与核心观点\n([\s\S]*?)$/)gapfrontend-regex-parserReport
2835frontend/src/components/Step4Report.vue908const queryMatch = text.match(/搜索查询:\s*(.+?)(?:\n|$)/)gapfrontend-regex-parserReport
2836frontend/src/components/Step4Report.vue912const countMatch = text.match(/找到\s*(\d+)\s*条/)gapfrontend-regex-parserReport
2837frontend/src/components/Step4Report.vue916const factsSection = text.match(/### 相关事实:\n([\s\S]*)$/)gapfrontend-regex-parserReport
2838frontend/src/components/Step4Report.vue923const edgesSection = text.match(/### 相关边:\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2839frontend/src/components/Step4Report.vue936const nodesSection = text.match(/### 相关节点:\n([\s\S]*?)(?=\n###|$)/)gapfrontend-regex-parserReport
2840frontend/src/components/Step4Report.vue1325return t === '(该平台未获得回复)' || t === '(该平台未获得回复)' || t === '[无回复]'gapfrontend-ui-stringReport
2841frontend/src/components/Step4Report.vue1334// 1. "问题X" / "问题X:" — the newer Chinese-style format from the backend.gapfrontend-ui-stringReport
2842frontend/src/components/Step4Report.vue1339// Try the "问题X" form first.gapfrontend-ui-stringReport
2843frontend/src/components/Step4Report.vue1340const cnPattern = /(?:^|[\r\n]+)问题(\d+)[:]\s*/greview-neededfrontend-otherReport
2844frontend/src/components/Step4Report.vue1364.replace(/^问题\d+[:]\s*/, '')review-neededfrontend-otherReport
2845frontend/src/components/Step4Report.vue1464h('div', { class: 'reason-label' }, '选择理由'),gapfrontend-ui-stringReport
2846frontend/src/components/Step4Report.vue1774return steps[0] || { noLabel: '--', title: '等待开始', status: 'todo', meta: '' }gapfrontend-ui-stringReport
2847frontend/src/components/Step4Report.vue2005if (log.includes('ERROR') || log.includes('错误')) return 'error'gapfrontend-ui-stringReport
2848frontend/src/components/Step4Report.vue2006if (log.includes('WARNING') || log.includes('警告')) return 'warning'gapfrontend-ui-stringReport
2849frontend/src/components/Step4Report.vue2096// Look for content after the Chinese "最终答案:" marker.gapfrontend-ui-stringReport
2850frontend/src/components/Step4Report.vue2097const chineseFinalMatch = response.match(/最终答案[:]\s*\n*([\s\S]*)$/i)gapfrontend-regex-parserReport
2851frontend/src/components/Step5Interaction.vue721.map(msg => `${msg.role === 'user' ? '提问者' : '你'}${msg.content}`)gapfrontend-ui-stringInteraction
2852frontend/src/components/Step5Interaction.vue723prompt = `以下是我们之前的对话:\n${historyContext}\n\n现在我的新问题是${message}`gapfrontend-ui-stringInteraction
2853frontend/src/views/Process.vue10<div class="step-name">图谱构建</div>review-neededfrontend-otherUI
2854frontend/src/views/Process.vue26<span class="header-title">实时知识图谱</span>review-neededfrontend-otherUI
2855frontend/src/views/Process.vue30<span class="stat-item">{{ graphData.node_count || graphData.nodes?.length || 0 }} 节点</span>review-neededfrontend-otherUI
2856frontend/src/views/Process.vue32<span class="stat-item">{{ graphData.edge_count || graphData.edges?.length || 0 }} 关系</span>review-neededfrontend-otherUI
2857frontend/src/views/Process.vue36<button class="action-btn" @click="refreshGraph" :disabled="graphLoading" title="刷新图谱">gapfrontend-ui-stringUI
2858frontend/src/views/Process.vue39<button class="action-btn" @click="toggleFullScreen" :title="isFullScreen ? '退出全屏' : '全屏显示'">gapfrontend-ui-stringUI
2859frontend/src/views/Process.vue53实时更新中...review-neededfrontend-otherUI
2860frontend/src/views/Process.vue174<p class="loading-text">图谱数据加载中...</p>review-neededfrontend-otherUI
2861frontend/src/views/Process.vue192<p class="waiting-text">等待本体生成</p>review-neededfrontend-otherUI
2862frontend/src/views/Process.vue193<p class="waiting-hint">生成完成后将自动开始构建图谱</p>review-neededfrontend-otherUI
2863frontend/src/views/Process.vue203<p class="waiting-text">图谱构建中</p>review-neededfrontend-otherUI
2864frontend/src/views/Process.vue204<p class="waiting-hint">数据即将显示...</p>review-neededfrontend-otherUI
2865frontend/src/views/Process.vue228<span class="header-title">构建流程</span>review-neededfrontend-otherUI
2866frontend/src/views/Process.vue237<div class="phase-title">本体生成</div>review-neededfrontend-otherUI
2867frontend/src/views/Process.vue247<div class="detail-label">接口说明</div>review-neededfrontend-otherUI
2868frontend/src/views/Process.vue249上传文档后LLM分析文档内容自动生成适合舆论模拟的本体结构实体类型 + 关系类型)review-neededfrontend-otherUI
2869frontend/src/views/Process.vue255<div class="detail-label">生成进度</div>review-neededfrontend-otherUI
2870frontend/src/views/Process.vue264<div class="detail-label">生成的实体类型 ({{ projectData.ontology.entity_types?.length || 0 }})</div>review-neededfrontend-otherUI
2871frontend/src/views/Process.vue277<div class="detail-label">生成的关系类型 ({{ projectData.ontology.relation_types?.length || 0 }})</div>review-neededfrontend-otherUI
2872frontend/src/views/Process.vue291+{{ projectData.ontology.relation_types.length - 5 }} 更多关系...review-neededfrontend-otherUI
2873frontend/src/views/Process.vue298<div class="waiting-hint">等待本体生成...</div>review-neededfrontend-otherUI
2874frontend/src/views/Process.vue308<div class="phase-title">图谱构建</div>review-neededfrontend-otherUI
2875frontend/src/views/Process.vue318<div class="detail-label">接口说明</div>review-neededfrontend-otherUI
2876frontend/src/views/Process.vue320基于生成的本体,将文档分块后调用 Zep API 构建知识图谱,提取实体和关系review-neededfrontend-otherUI
2877frontend/src/views/Process.vue326<div class="waiting-hint">等待本体生成完成...</div>review-neededfrontend-otherUI
2878frontend/src/views/Process.vue331<div class="detail-label">构建进度</div>review-neededfrontend-otherUI
2879frontend/src/views/Process.vue342<div class="detail-label">构建结果</div>review-neededfrontend-otherUI
2880frontend/src/views/Process.vue346<span class="result-label">实体节点</span>review-neededfrontend-otherUI
2881frontend/src/views/Process.vue350<span class="result-label">关系边</span>review-neededfrontend-otherUI
2882frontend/src/views/Process.vue354<span class="result-label">实体类型</span>review-neededfrontend-otherUI
2883frontend/src/views/Process.vue366<div class="phase-title">构建完成</div>review-neededfrontend-otherUI
2884frontend/src/views/Process.vue367<div class="phase-api">准备进入下一步骤</div>review-neededfrontend-otherUI
2885frontend/src/views/Process.vue378进入环境搭建review-neededfrontend-otherUI
2886frontend/src/views/Process.vue388<span class="project-title">项目信息</span>review-neededfrontend-otherUI
2887frontend/src/views/Process.vue392<span class="item-label">项目名称</span>review-neededfrontend-otherUI
2888frontend/src/views/Process.vue396<span class="item-label">项目ID</span>review-neededfrontend-otherUI
2889frontend/src/views/Process.vue400<span class="item-label">图谱ID</span>review-neededfrontend-otherUI
2890frontend/src/views/Process.vue404<span class="item-label">模拟需求</span>review-neededfrontend-otherUI
2891frontend/src/views/Process.vue452if (error.value) return '构建失败'gapfrontend-ui-stringUI
2892frontend/src/views/Process.vue453if (currentPhase.value >= 2) return '构建完成'gapfrontend-ui-stringUI
2893frontend/src/views/Process.vue454if (currentPhase.value === 1) return '图谱构建中'gapfrontend-ui-stringUI
2894frontend/src/views/Process.vue455if (currentPhase.value === 0) return '本体生成中'gapfrontend-ui-stringUI
2895frontend/src/views/Process.vue456return '初始化中'gapfrontend-ui-stringUI
2896frontend/src/views/Process.vue482alert('环境搭建功能开发中...')gapfrontend-ui-stringUI
2897frontend/src/views/Process.vue536if (currentPhase.value > phase) return '已完成'gapfrontend-ui-stringUI
2898frontend/src/views/Process.vue541return '进行中'gapfrontend-ui-stringUI
2899frontend/src/views/Process.vue543return '等待中'gapfrontend-ui-stringUI
2900frontend/src/views/Process.vue563error.value = '没有待上传的文件,请返回首页重新操作'gapfrontend-ui-stringUI
2901frontend/src/views/Process.vue571ontologyProgress.value = { message: '正在上传文件并分析文档...' }gapfrontend-ui-stringUI
2902frontend/src/views/Process.vue598error.value = response.error || '本体生成失败'gapfrontend-ui-stringUI
2903frontend/src/views/Process.vue602error.value = '项目初始化失败: ' + (err.message || '未知错误')gapfrontend-ui-stringUI
2904frontend/src/views/Process.vue634error.value = response.error || '加载项目失败'gapfrontend-ui-stringUI
2905frontend/src/views/Process.vue638error.value = '加载项目失败: ' + (err.message || '未知错误')gapfrontend-ui-stringUI
2906frontend/src/views/Process.vue657error.value = projectData.value?.error || '处理失败'gapfrontend-ui-stringUI
2907frontend/src/views/Process.vue667message: '正在启动图谱构建...'gapfrontend-ui-stringUI
2908frontend/src/views/Process.vue673buildProgress.value.message = '图谱构建任务已启动...'gapfrontend-ui-stringUI
2909frontend/src/views/Process.vue681error.value = response.error || '启动图谱构建失败'gapfrontend-ui-stringUI
2910frontend/src/views/Process.vue686error.value = '启动图谱构建失败: ' + (err.message || '未知错误')gapfrontend-ui-stringUI
2911frontend/src/views/Process.vue763message: task.message || '处理中...'gapfrontend-ui-stringUI
2912frontend/src/views/Process.vue778message: '构建完成,正在加载图谱...'gapfrontend-ui-stringUI
2913frontend/src/views/Process.vue797error.value = '图谱构建失败: ' + (task.error || '未知错误')gapfrontend-ui-stringUI
2914frontend/src/views/Process.vue872.text('等待图谱数据...')gapfrontend-ui-stringUI
2915frontend/src/views/Process.vue884name: n.name || '未命名',gapfrontend-ui-stringUI
2916frontend/src/views/Process.vue900source_name: nodeMap[e.source_node_uuid]?.name || '未知',gapfrontend-ui-stringUI
2917frontend/src/views/Process.vue901target_name: nodeMap[e.target_node_uuid]?.name || '未知'gapfrontend-ui-stringUI