模块介绍 / 今日规划 / 下班日报 / 团队摘要 生成成功后没有上报,也几乎不写「AI」日志。

流结束时的 usage 用了非阻塞发送,通道一满就被丢掉;很多服务商默认还不在流里带 usage。
现在每次真正打到模型的调用都会:

在本地日志(分类 AI,消息 AI 调用完成)写下 scene / prompt / completion / cached
登录后同步上报到后台日汇总
This commit is contained in:
李琦
2026-08-17 14:00:47 +08:00
parent 83e69317d4
commit e71ce451ff
23 changed files with 1363 additions and 93 deletions

10
team.go
View File

@@ -619,16 +619,21 @@ func (a *App) generateTeamDigest(teamID int64, date string) {
prompt := fmt.Sprintf("以下是团队「%s」%s 的 %d 份成员日报请生成一份团队日报摘要Markdown\n"+
"1. 今日完成事项汇总(合并同类项)\n2. 进行中的工作\n3. 风险与阻塞(没有则省略)\n4. 每位成员一句话点评\n5. 明日建议\n\n%s",
teamName, date, n, sb.String())
stream, e := provider.ChatStream(ctx, []ai.Message{
digestMsgs := []ai.Message{
{Role: "system", Content: "你是资深研发团队负责人助理,输出简洁、结构化的中文 Markdown 团队日报摘要,不要编造日报里没有的内容。"},
{Role: "user", Content: prompt},
})
}
stream, e := provider.ChatStream(ctx, digestMsgs)
if e != nil {
emitErr(e.Error())
return
}
var out strings.Builder
var usage *ai.Usage
for chunk := range stream {
if chunk.Usage != nil {
usage = chunk.Usage
}
if chunk.Err != nil {
emitErr(chunk.Err.Error())
return
@@ -647,6 +652,7 @@ func (a *App) generateTeamDigest(teamID int64, date string) {
emitErr(e.Error())
return
}
a.recordAIUsage(provider.Name(), "team_digest", usage, digestMsgs, content)
a.store.Log("info", "团队", "团队日报摘要已生成", fmt.Sprintf("team=%d date=%s", teamID, date))
a.emit("team:digest", teamDigestEvent{TeamID: teamID, Date: date})
}