45 lines
1.2 KiB
Go
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)
|
|
}
|