Skip to content

Feature/model - #38

Merged
sjwauto123 merged 20 commits into
mainfrom
feature/model
Aug 5, 2026
Merged

Feature/model#38
sjwauto123 merged 20 commits into
mainfrom
feature/model

Conversation

@sjwauto123

Copy link
Copy Markdown
Collaborator

No description provided.

- 新增 ObservabilityConfig:采样率/错误必采/尾延迟阈值/缓冲区/PII规则/高基数保护/白名单等字段
- 配置结构挂到 Config.Observability 并提供环境变量覆盖
- Validate(): 校验采样率(0-1)、阈值>0、白名单、sink批量参数、卡片上限合理区间
- 新增 agentCallbackHandler:回调每步 start/end,记录 AgentTask/AgentTaskStep 实体
- 记录模型名称、工具调用入参出参、每步决策、耗时、错误与状态
- Engine/Execute 流程:Span 包裹 CreateTask/RunTool/PrepareFinal,保证可观测性 Span Tree 完整
- Agent 异常与工具执行错误通过 Recorder.AddEvent/EndSpan 上报
- types.go:Span/Trace/Feedback/AgentStep 核心结构 + Recorder 接口(10+ 方法),字段与 OpenTelemetry 对齐
- recorder.go:defaultRecorder 管理 trace 上下文、采样决策、批量异步 sink、指标收集;暴露 MetricsSnapshot/FlushTrace/ForceSampling
- sampling.go:默认采样率 + 错误必采 + 尾延迟必采 + 点踩必采 + 用户白名单
- pii_mask.go:邮箱/手机号/密钥打码、长文本截断、敏感字段按规则过滤
- metrics.go:Counter/Gauge/Histogram 三类型指标存储 + 高基数 guard + expvar 导出
- sink.go:LogSink 结构化行输出 + BatchSink 批量异步 + 队列满丢弃缓冲保护
- gin_middleware.go:注入 X-Request-ID / X-Trace-ID、记录 HTTP 指标、Panic 捕获、设置 trace root attrs
- entity/observability.go:ChatTrace / AgentTask / AgentTaskStep 实体,对应 chat_traces / agent_tasks / agent_task_steps 表
- entity/message_feedback.go:MessageFeedback 实体,用于用户点赞/点踩、原因标签与评论
- repository/observability_interface.go:ObservabilityRepo 接口(SaveTrace/ListTraces/InsertFeedback/SaveAgentTask/ListTraceIDs...)
- repository/observability_repository.go:GORM 实现,包含必要索引查询、分页、SpanTree JSON 序列化
- chat_interface:新增 SubmitFeedback / GetTrace / ListSessionTraces / GetMetricsSnapshot 接口
- chat_service:注入 Recorder + ObservabilityRepo 实现;校验(权限;FlushTrace 保存到 DB;PII 处理通过 session 合法
- context_service:ChatRequest入站出站用 with Trace 包裹、Agent/RAG/LLM 调用 + Session 各阶段 Span 打点
- chat_message_repository:新增 InsertFeedback / GetMessageByID 与 ListTraces / GetTrace 基础读辅助查询
- routes.go:新增
  - POST /api/v1/chat/messages/:id/feedback(提交反馈)
  - GET  /api/v1/chat/traces/:id(单 Trace 详情)
  - GET  /api/v1/chat/sessions/:id/traces(会话 Traces 列表)
  - GET  /api/v1/chat/observability/metrics(指标快照)
- controller.go:绑定 DTO → 调用 Service → 返回统一 response
  - 反馈提交:BadRequest 参数错误;BizError 透传业务错误(如无权限/消息不存在)
  - 所有接口统一通过 Recorder 记录 route / user_id / session_id 根属性
- app.go:Initialize 阶段按配置构建 Observability Recorder + DBSink,注入到 ChatService
- app.go:initServer 阶段将 TraceMiddleware 统一挂到 gin.Engine(在 auth 之前),保证异常/panic 也能打点
- middleware/auth.go:鉴权完成后把 user_id 写入 trace root attrs,并记录 auth 事件
- 保证每条请求链路:request_id → trace_id → user_id → session_id 全部可串联回溯
- types/chat.ts:新增 FeedbackRating / FeedbackRequest / TraceSummary / ChatTraceDetail / MetricsSnapshot / ChatSpan 等类型
- types/common.ts:响应统一结构附带 _meta.trace_id / request_id
- api/chat.ts:新增 submitFeedback / getTrace / listSessionTraces / getMetricsSnapshot 接口
- api/admin.ts:新增 adminGetObservabilityMetrics 管理员拉指标快照
- api/client.ts:request/streamRequest 从响应头提取 X-Trace-ID、X-Request-ID 注入 _meta
- composables/useChat.ts:DisplayMessage 扩展 trace_id/feedback_* 字段;实现 submitFeedback 本地状态同步与请求调用
- 每条 assistant 消息底部新增一组反馈操作:
  - 👍 点赞 / 👎 点踩(点踩直接弹标签框)
  - 11 种常见原因标签多选(回答不准/答非所问/过时/幻觉/引用错误/排版/语气/啰嗦/简短/期望更好分析/其他)
  - 自由评论框 + 二次确认提交
- 消息 meta 行展示 Trace ID(截断前 8 位),鼠标悬停看完整值 + 一键复制
- 已提交 feedback reasons 以红色 chip 形式在消息底部回显,便于自己看历史反馈
- 成功提交后本地同步更新消息的 feedback_rating / feedback_reasons / feedback_comment
- AdminPage 新增「可观测性」tab,分子 tab:
  - 指标 Metrics:5 张统计卡(采样率/缓冲区丢弃/PII 脱敏次数/标签基数丢弃/标签上限)
    Counters / Gauges 表格展示 label chip + value;Histograms 分布柱状图;可一键刷新
  - 链路 Traces:按 Session ID 查 Traces 列表;按 Trace ID 直查详情
    列表列:Trace ID / Session / Status Badge / Duration / Sampled / Created / 查看详情
- Trace 详情弹窗:展示根属性、错误红框、SpanTree 递归展开
  - 每个 Span 显示:名称、status、component、span_id/parent_id、耗时占比进度条、error、Attrs、Events
  - 可按层级 +/− 折叠(默认前 2 层展开)
- 新增组件:
  - StatCard:统一统计卡片样式,支持 5 种强调色
  - TraceSpanNode:递归 Span 树节点,统一样式与交互
- chat_interface: FeedbackRequest.Reasons[] 数组替换单 reason_tag;TraceListResponse JSON 改 traces/Feedbacks;GetTrace/ListSessionTraces 增加isAdmin跳过鉴权;新增AdminListTraces
- entity/message_feedback: 增加reasons JSONB列、is_quick_reply列;SetReasons/Reasons() 存取数组
- observability/types: Feedback结构增加Reasons[]
- obsRepo: 新增 ChatTraceRepo.ListAll 权限过滤;ListBySession/ListAll查询补充sample_rate/sampled投影
- chat_service:
  - SubmitFeedback → reasons数组 + SetReasons;观测指标取第0个作为tag;obs.RecordFeedback包含Reasons
  - ListFeedbacks → 返回Feedbacks字段,每条附带Reasons数组展开
  - GetTrace/ListSessionTraces → isAdmin绕过权限;Traces字段名
  - AdminListTraces → 按session_id/status过滤
  - GetMetricsSnapshot → 全量重写:按metric name分组,labels改Record,histogram buckets用delta_count赋count;加ts/sampling_rate/label_cardinality_limit/buffer_dropped_total/pii_masked_total/label_cardinality_dropped_total字段
- recorder: 加 Config() SamplingRate() 给service取配置
- controller: 传isAdmin;新增AdminListTraces/AdminGetTrace;MetricsSnapshot去掉内部的权限检查(交给路由RequireAdmin)
- routes: /admin/observability/traces GET list / GET :trace_id
- api/admin.ts: 路径修正 adminGetObservabilityMetrics → /admin/observability/metrics;新增 adminListTraces(支持session_id/status/rating分页)、adminGetTrace
- AdminPage:
  - 弃用 chat.ts 的 getTrace/listSessionTraces,改用 admin.ts 的管理员专属接口
  - Traces 查询:Session ID 可留空(全局查最新),按钮禁用取消
  - 加载 traces:res.traces / res.total 与后端对齐
  - 用 TraceRootProvider 注入 trace_root_duration_ms(替代 self_root_duration_ms),保证子 span 进度条百分比计算正确
- TraceSpanNode: inject('trace_root_duration_ms') 作为进度条分母
- TraceRootProvider: provide + computed,递归渲染时给子节点统一提供 root span 的 duration_ms
- 在 chat_interface.go 新增 TraceAgentTaskResponse / TraceAgentStepResponse 响应结构
- TraceResponse 增加 agent_task 与 agent_steps 字段
- 提供 entity → response 转换函数并统一时间格式
- 前端 chat.ts 类型同步补齐,便于页面渲染链路信息
- chat_service.go SendMessage 中创建 AgentTask(traceID=taskID),结束时统一 MarkEnded
- 抽 buildTraceResponse 公共函数:GetTrace 详情通过 FindByTraceID 回填 AgentTask/AgentSteps
- context_service.go SummarizeSession 增加 existing 非空判断,修复 CoveredCount 空指针
- chat_service_mode.go 异步刷新摘要与保存的 goroutine 增加 defer recover,避免深度模式多轮后进程崩溃
- 列表接口不再逐条查 Agent 详情,避免放大查询量
- observability/recorder.go 补全 AgentTask/AgentStep 记录与查询适配
- observability/eino_callback.go 新增 Eino Callback 适配,透传执行节点到可观测性
- agent/callback.go/execute.go/prompt.go 调整调用路径,把 TraceID 贯穿到每个步骤
- rag/eino_adapter.go 接入 RAG 侧 Eino 适配层,统一流式/块处理
- search_service.go 调整搜索编排,适配新的可观测性上下文
- tool/document_tools.go + tool_factory.go 重构文档工具侧入口,改为工厂化构造
…at_mode 文件

- 新增 document_chunk interface + repository,替换原先 chunk_repository 与 document_content_repository
- 新增 user_memory interface + repository,替代旧 memory_interface/memory_repository
- document_repository.go 同步调整为依赖新的 document_chunk 抽象
- 删除内部/Service 层不再使用的 chat_mode.go、tool_service.go
- 保持接口边界清晰,避免跨层直接耦合旧实现
…odel_config 模块

- chat 服务内部拆分:chat_error_messages/chat_event_helpers/chat_prompt_builder 替代旧 error_messages/event_helpers/prompt_builder/intent_analyzer/chat_service_prompt
- 新增 chat_service_eino_quick.go,快速模式走 Eino 编排,保持与深度模式分层一致
- model 模块删除 system_* / user_* 拆分文件,改为 controller.go + routes.go 统一承载
- 新增 user_model_config 模块(controller + routes),承载用户模型配置能力
- router.go 按模块聚合新路由,保证路由分组与模块目录一致
- app.go 注入新 Eino Adapter、Observability Callback 与 user_memory/document_chunk Repo 依赖
- llm/embedding.go 调整向量侧调用,适配新 RAG 抽象
- pkg/config/config.go 补全新增模块所需配置解析(observability/agent/profile 等)
- 同步 go.mod / go.sum 依赖版本
- AdminPage.vue 扩展可观测性列表/详情视图,支持 agent_task 与 agent_steps 渲染
- TraceSpanNode.vue 适配新链路展示,补充步骤状态/耗时/工具列
- ProfilePage.vue / useAuth.ts 调整登录态获取方式,适配后端鉴权返回结构
- router/index.ts 新增/收敛管理台路由分组(可观测性、模型配置、用户模型配置)
- document/controller.go 适配新 repository 层接口,保持文档上传/查询行为
- 修复用户上次选择模型无法持久化:后端采用 cache-aside(同步写缓存+DB,GetUserByID 读优先走缓存并回填),前端修正 profile.lastModel 读取路径(嵌套在 user 对象内)

- 为所有已修改文件补充简洁中文注释,统一代码可读性
@sjwauto123 sjwauto123 self-assigned this Aug 5, 2026
@sjwauto123
sjwauto123 merged commit e1208e4 into main Aug 5, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant