create_research_tables.sql 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. -- 创建研究任务相关表
  2. -- 1. 研究任务表
  3. CREATE TABLE IF NOT EXISTS aigcspace.research_tasks (
  4. -- 主键与基础信息
  5. id SERIAL PRIMARY KEY,
  6. task_id VARCHAR(64) UNIQUE NOT NULL,
  7. user_id VARCHAR(50) NOT NULL,
  8. -- 研究配置
  9. model VARCHAR(50) NOT NULL DEFAULT 'qwen-deep-research',
  10. output_format VARCHAR(50) DEFAULT 'model_detailed_report',
  11. -- 研究内容
  12. initial_query TEXT NOT NULL,
  13. clarification_questions TEXT,
  14. user_clarification TEXT,
  15. research_goal TEXT,
  16. -- 研究结果
  17. research_plan TEXT,
  18. final_report TEXT,
  19. web_sites JSONB,
  20. reference_sources JSONB,
  21. -- 任务状态
  22. status VARCHAR(20) NOT NULL DEFAULT 'pending',
  23. current_phase VARCHAR(50),
  24. phase_status VARCHAR(50),
  25. error_message TEXT,
  26. -- Token 统计
  27. input_tokens INTEGER DEFAULT 0,
  28. output_tokens INTEGER DEFAULT 0,
  29. total_tokens INTEGER DEFAULT 0,
  30. -- 费用统计
  31. bill NUMERIC(10, 4) DEFAULT 0,
  32. -- 时间戳
  33. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  34. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  35. clarified_at TIMESTAMP,
  36. completed_at TIMESTAMP,
  37. -- 软删除
  38. is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
  39. deleted_at TIMESTAMP,
  40. -- 外键约束
  41. CONSTRAINT fk_research_tasks_user_id FOREIGN KEY (user_id)
  42. REFERENCES aigcspace.users(id) ON DELETE CASCADE
  43. );
  44. -- 创建索引
  45. CREATE INDEX IF NOT EXISTS idx_research_tasks_user_id ON aigcspace.research_tasks(user_id);
  46. CREATE INDEX IF NOT EXISTS idx_research_tasks_task_id ON aigcspace.research_tasks(task_id);
  47. CREATE INDEX IF NOT EXISTS idx_research_tasks_status ON aigcspace.research_tasks(status);
  48. CREATE INDEX IF NOT EXISTS idx_research_tasks_created_at ON aigcspace.research_tasks(created_at);
  49. CREATE INDEX IF NOT EXISTS idx_research_tasks_is_deleted ON aigcspace.research_tasks(is_deleted);
  50. CREATE INDEX IF NOT EXISTS idx_research_tasks_user_deleted ON aigcspace.research_tasks(user_id, is_deleted);
  51. CREATE INDEX IF NOT EXISTS idx_research_tasks_current_phase ON aigcspace.research_tasks(current_phase);
  52. -- 全文搜索索引
  53. CREATE INDEX IF NOT EXISTS idx_research_tasks_query_search ON aigcspace.research_tasks
  54. USING gin(to_tsvector('simple', initial_query));
  55. CREATE INDEX IF NOT EXISTS idx_research_tasks_report_search ON aigcspace.research_tasks
  56. USING gin(to_tsvector('simple', final_report));
  57. -- 添加表注释
  58. COMMENT ON TABLE aigcspace.research_tasks IS '研究任务表';
  59. COMMENT ON COLUMN aigcspace.research_tasks.id IS '主键ID';
  60. COMMENT ON COLUMN aigcspace.research_tasks.task_id IS '任务唯一标识(UUID)';
  61. COMMENT ON COLUMN aigcspace.research_tasks.user_id IS '用户ID';
  62. COMMENT ON COLUMN aigcspace.research_tasks.model IS '研究模型';
  63. COMMENT ON COLUMN aigcspace.research_tasks.output_format IS '输出格式:model_detailed_report/model_summary_report';
  64. COMMENT ON COLUMN aigcspace.research_tasks.initial_query IS '初始研究问题';
  65. COMMENT ON COLUMN aigcspace.research_tasks.clarification_questions IS '模型反问的澄清问题';
  66. COMMENT ON COLUMN aigcspace.research_tasks.user_clarification IS '用户的澄清回答';
  67. COMMENT ON COLUMN aigcspace.research_tasks.research_goal IS '最终确定的研究目标';
  68. COMMENT ON COLUMN aigcspace.research_tasks.research_plan IS '研究计划';
  69. COMMENT ON COLUMN aigcspace.research_tasks.final_report IS '最终研究报告';
  70. COMMENT ON COLUMN aigcspace.research_tasks.web_sites IS '搜索的网站列表';
  71. COMMENT ON COLUMN aigcspace.research_tasks.reference_sources IS '引用文献列表';
  72. COMMENT ON COLUMN aigcspace.research_tasks.status IS '任务状态:pending/clarifying/researching/completed/failed';
  73. COMMENT ON COLUMN aigcspace.research_tasks.current_phase IS '当前阶段:answer/ResearchPlanning/WebResearch/KeepAlive';
  74. COMMENT ON COLUMN aigcspace.research_tasks.phase_status IS '阶段状态:typing/finished/streamingQueries/streamingWebResult/WebResultFinished';
  75. COMMENT ON COLUMN aigcspace.research_tasks.error_message IS '错误信息';
  76. COMMENT ON COLUMN aigcspace.research_tasks.input_tokens IS '输入Token数';
  77. COMMENT ON COLUMN aigcspace.research_tasks.output_tokens IS '输出Token数';
  78. COMMENT ON COLUMN aigcspace.research_tasks.total_tokens IS '总Token数';
  79. COMMENT ON COLUMN aigcspace.research_tasks.bill IS '消费金额(元)';
  80. COMMENT ON COLUMN aigcspace.research_tasks.created_at IS '创建时间';
  81. COMMENT ON COLUMN aigcspace.research_tasks.updated_at IS '更新时间';
  82. COMMENT ON COLUMN aigcspace.research_tasks.clarified_at IS '澄清完成时间';
  83. COMMENT ON COLUMN aigcspace.research_tasks.completed_at IS '研究完成时间';
  84. COMMENT ON COLUMN aigcspace.research_tasks.is_deleted IS '是否已删除';
  85. COMMENT ON COLUMN aigcspace.research_tasks.deleted_at IS '删除时间';
  86. -- 2. 研究阶段日志表
  87. CREATE TABLE IF NOT EXISTS aigcspace.research_phase_logs (
  88. -- 主键与基础信息
  89. id SERIAL PRIMARY KEY,
  90. task_id VARCHAR(64) NOT NULL,
  91. -- 阶段信息
  92. phase VARCHAR(50) NOT NULL,
  93. status VARCHAR(50) NOT NULL,
  94. content TEXT,
  95. -- 额外信息
  96. extra_data JSONB,
  97. -- 时间戳
  98. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  99. -- 外键约束
  100. CONSTRAINT fk_research_phase_logs_task_id FOREIGN KEY (task_id)
  101. REFERENCES aigcspace.research_tasks(task_id) ON DELETE CASCADE
  102. );
  103. -- 创建索引
  104. CREATE INDEX IF NOT EXISTS idx_research_phase_logs_task_id ON aigcspace.research_phase_logs(task_id);
  105. CREATE INDEX IF NOT EXISTS idx_research_phase_logs_phase ON aigcspace.research_phase_logs(phase);
  106. CREATE INDEX IF NOT EXISTS idx_research_phase_logs_created_at ON aigcspace.research_phase_logs(created_at);
  107. -- 添加表注释
  108. COMMENT ON TABLE aigcspace.research_phase_logs IS '研究阶段日志表';
  109. COMMENT ON COLUMN aigcspace.research_phase_logs.id IS '主键ID';
  110. COMMENT ON COLUMN aigcspace.research_phase_logs.task_id IS '关联的研究任务ID';
  111. COMMENT ON COLUMN aigcspace.research_phase_logs.phase IS '阶段名称:answer/ResearchPlanning/WebResearch/KeepAlive';
  112. COMMENT ON COLUMN aigcspace.research_phase_logs.status IS '阶段状态';
  113. COMMENT ON COLUMN aigcspace.research_phase_logs.content IS '阶段输出内容';
  114. COMMENT ON COLUMN aigcspace.research_phase_logs.extra_data IS '额外数据(deep_research信息)';
  115. COMMENT ON COLUMN aigcspace.research_phase_logs.created_at IS '创建时间';
  116. -- 3. 研究统计表
  117. CREATE TABLE IF NOT EXISTS aigcspace.research_statistics (
  118. -- 主键与基础信息
  119. id SERIAL PRIMARY KEY,
  120. user_id VARCHAR(50) NOT NULL,
  121. stat_date TIMESTAMP NOT NULL,
  122. -- 统计数据
  123. total_researches INTEGER DEFAULT 0,
  124. completed_researches INTEGER DEFAULT 0,
  125. failed_researches INTEGER DEFAULT 0,
  126. -- Token 统计
  127. total_input_tokens INTEGER DEFAULT 0,
  128. total_output_tokens INTEGER DEFAULT 0,
  129. total_tokens INTEGER DEFAULT 0,
  130. -- 费用统计
  131. total_cost NUMERIC(10, 4) DEFAULT 0,
  132. -- 报告类型统计
  133. detailed_reports INTEGER DEFAULT 0,
  134. summary_reports INTEGER DEFAULT 0,
  135. -- 时间戳
  136. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  137. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  138. -- 外键约束
  139. CONSTRAINT fk_research_statistics_user_id FOREIGN KEY (user_id)
  140. REFERENCES aigcspace.users(id) ON DELETE CASCADE,
  141. -- 唯一约束
  142. CONSTRAINT uk_research_statistics UNIQUE (user_id, stat_date)
  143. );
  144. -- 创建索引
  145. CREATE INDEX IF NOT EXISTS idx_research_statistics_user_id ON aigcspace.research_statistics(user_id);
  146. CREATE INDEX IF NOT EXISTS idx_research_statistics_stat_date ON aigcspace.research_statistics(stat_date);
  147. CREATE INDEX IF NOT EXISTS idx_research_statistics_user_date ON aigcspace.research_statistics(user_id, stat_date);
  148. -- 添加表注释
  149. COMMENT ON TABLE aigcspace.research_statistics IS '研究统计表';
  150. COMMENT ON COLUMN aigcspace.research_statistics.id IS '主键ID';
  151. COMMENT ON COLUMN aigcspace.research_statistics.user_id IS '用户ID';
  152. COMMENT ON COLUMN aigcspace.research_statistics.stat_date IS '统计日期';
  153. COMMENT ON COLUMN aigcspace.research_statistics.total_researches IS '研究总数';
  154. COMMENT ON COLUMN aigcspace.research_statistics.completed_researches IS '完成的研究数';
  155. COMMENT ON COLUMN aigcspace.research_statistics.failed_researches IS '失败的研究数';
  156. COMMENT ON COLUMN aigcspace.research_statistics.total_input_tokens IS '总输入Token数';
  157. COMMENT ON COLUMN aigcspace.research_statistics.total_output_tokens IS '总输出Token数';
  158. COMMENT ON COLUMN aigcspace.research_statistics.total_tokens IS '总Token数';
  159. COMMENT ON COLUMN aigcspace.research_statistics.total_cost IS '总费用(元)';
  160. COMMENT ON COLUMN aigcspace.research_statistics.detailed_reports IS '详细报告数量';
  161. COMMENT ON COLUMN aigcspace.research_statistics.summary_reports IS '摘要报告数量';
  162. COMMENT ON COLUMN aigcspace.research_statistics.created_at IS '创建时间';
  163. COMMENT ON COLUMN aigcspace.research_statistics.updated_at IS '更新时间';