mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-27 04:43:11 +00:00
- internal/sdk:KnowledgeAPI 增加 SearchIn/AddWithMedia/AttachMedia/ ReindexDense/DenseStats;新增 MediaAPI(Put/Stat/Get)与 PluginSDK.Media(), registry 装配。**公开 SDK 契约一字未动** —— third_party/homeagent-sdk/sdk/ 的 diff 恒为 0(发布纪律的硬约束),走 internal/sdk 这条明确不受冻结约束 的内部扩展路径。 - proc:新增 knowledge.addWithMedia(正文与媒体清单都走共享内存,与 doc.insertWithMedia 同形);knowledge.search 支持 category。 - corehandler 用**局部接口 + 类型断言**取扩展能力,而非直接引 internal/sdk: 后者已依赖 internal/plugin 的类型,直接引会成环(CoreSDK 注释已警示)。 断言失败明确报"能力不可用",不静默退化成"媒体已写入"。 - agent 工具面:knowledge_search 增加 category;knowledge_create 增加 media_digests(复用 doc_commit 的 digest 前缀解析 + Stat 回读 MIME)。 顺带修 knowledge_search 的分类前缀重复(Name 已含分类,旧代码又拼一次, 实测输出 tech/go/tech/go/并发)。 - agent 启动接线多模态空间,顺序为先接线再 ReindexDense(否则首次启动 算出的向量因 MediaStore 未就绪而不落盘)。
90 lines
1.9 KiB
Go
90 lines
1.9 KiB
Go
package sdk
|
|
|
|
import "gitcode.com/JianFeeeee/HomeAgent/internal/knowledge"
|
|
|
|
type knowledgeImpl struct{ ks *knowledge.Store }
|
|
|
|
func NewKnowledge(ks *knowledge.Store) KnowledgeAPI { return &knowledgeImpl{ks: ks} }
|
|
|
|
func (k *knowledgeImpl) Search(query string, topK int) ([]*Knowledge, error) {
|
|
if k.ks == nil {
|
|
return nil, nil
|
|
}
|
|
got := k.ks.Search(query, topK)
|
|
out := make([]*Knowledge, len(got))
|
|
for i, item := range got {
|
|
out[i] = &Knowledge{Name: item.Name, Content: item.Content}
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func (k *knowledgeImpl) Add(name, content string) error {
|
|
if k.ks == nil {
|
|
return nil
|
|
}
|
|
return k.ks.Add(name, content)
|
|
}
|
|
|
|
func (k *knowledgeImpl) SearchIn(query, category string, topK int) ([]*Knowledge, error) {
|
|
if k.ks == nil {
|
|
return nil, nil
|
|
}
|
|
got := k.ks.SearchIn(query, category, topK)
|
|
out := make([]*Knowledge, len(got))
|
|
for i, item := range got {
|
|
out[i] = &Knowledge{Name: item.Name, Content: item.Content}
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func (k *knowledgeImpl) AddWithMedia(name, content string, media []KnowledgeMediaRef) error {
|
|
if k.ks == nil {
|
|
return nil
|
|
}
|
|
return k.ks.AddWithMedia(name, content, media)
|
|
}
|
|
|
|
func (k *knowledgeImpl) AttachMedia(name string, media ...KnowledgeMediaRef) error {
|
|
if k.ks == nil {
|
|
return nil
|
|
}
|
|
return k.ks.AttachMedia(name, media...)
|
|
}
|
|
|
|
func (k *knowledgeImpl) ReindexDense() (int, int) {
|
|
if k.ks == nil {
|
|
return 0, 0
|
|
}
|
|
return k.ks.ReindexDense()
|
|
}
|
|
|
|
func (k *knowledgeImpl) DenseStats() map[string]interface{} {
|
|
if k.ks == nil {
|
|
return map[string]interface{}{}
|
|
}
|
|
return k.ks.DenseStats()
|
|
}
|
|
|
|
func (k *knowledgeImpl) List() ([]string, error) {
|
|
if k.ks == nil {
|
|
return nil, nil
|
|
}
|
|
return k.ks.List(), nil
|
|
}
|
|
|
|
func (k *knowledgeImpl) Stats() map[string]interface{} {
|
|
if k.ks == nil {
|
|
return map[string]interface{}{}
|
|
}
|
|
return k.ks.Stats()
|
|
}
|
|
|
|
func (k *knowledgeImpl) Remove(name string) error {
|
|
if k.ks == nil {
|
|
return nil
|
|
}
|
|
return k.ks.Remove(name)
|
|
}
|
|
|
|
var _ KnowledgeAPI = (*knowledgeImpl)(nil)
|