Files
Agent-System/internal/kb/client.go
T

45 lines
1.2 KiB
Go

package kb
import (
"context"
"fmt"
"os"
"path/filepath"
"strings"
"chat-agent-system/internal/config"
)
type Client struct {
cfg *config.Config
}
func NewClient(cfg *config.Config) *Client {
return &Client{cfg: cfg}
}
func (c *Client) Search(ctx context.Context, query string, limit int) ([]HitItem, error) {
// 基础查询:当未开启或处于离线测试时,返回标准结构
return []HitItem{}, nil
}
// MaterializeSnapshot 将检索命中的法规写入任务工作空间的 knowledge/ 目录
func MaterializeSnapshot(dir string, hits []HitItem) error {
kbDir := filepath.Join(dir, "knowledge")
if err := os.MkdirAll(kbDir, 0o755); err != nil {
return err
}
var sb strings.Builder
sb.WriteString("# 法规与指导原则检索快照\n\n")
sb.WriteString("以下为针对本项目命中的参考法规标准条文,请结合上下文使用,标注〔出处〕。\n\n")
for _, h := range hits {
sb.WriteString(fmt.Sprintf("### [%s] %s %s\n", strings.ToUpper(h.Category), h.DocCode, h.Title))
sb.WriteString(h.Content + "\n\n")
sb.WriteString(fmt.Sprintf("> 来源: %s\n\n---\n\n", h.Source))
}
return os.WriteFile(filepath.Join(kbDir, "hits.md"), []byte(sb.String()), 0o644)
}