后端: 1.收口阶段 6 agent 结构迁移,将 newAgent 内核与 agentsvc 编排层迁入 services/agent - 切换 Agent 启动装配与 HTTP handler 直连 agent sv,移除旧 service agent bridge - 补齐 Agent 对 memory、task、task-class、schedule 的 RPC 适配与契约字段 - 扩展 schedule、task、task-class RPC/contract 支撑 Agent 查询、写入与 provider 切流 - 更新迁移文档、README 与相关注释,明确 agent 当前切流点和剩余 memory 迁移面
59 lines
1.9 KiB
Go
59 lines
1.9 KiB
Go
package web
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"time"
|
||
)
|
||
|
||
// MockProvider 空实现搜索供应商,返回硬编码结果。
|
||
//
|
||
// 用途:
|
||
// 1. 在真实 API Key 到手前,先跑通工具注册→调用→observation 写回的完整链路;
|
||
// 2. 后续替换为 Tavily/Brave 实现后,Mock 保留用于单元测试。
|
||
//
|
||
// 不负责:
|
||
// 1. 不负责真实 HTTP 调用;
|
||
// 2. 不负责网络错误模拟(如需测试超时可另行实现 TimeoutMockProvider)。
|
||
type MockProvider struct{}
|
||
|
||
// Name 返回供应商标识。
|
||
func (m *MockProvider) Name() string { return "mock" }
|
||
|
||
// Search 返回 2 条硬编码搜索结果,模拟正常检索链路。
|
||
//
|
||
// 1. 无论 query 内容如何,始终返回相同结果;
|
||
// 2. ctx 仅做形式兼容,不检查超时;
|
||
// 3. 永远不返回 error(Mock 不模拟失败场景)。
|
||
func (m *MockProvider) Search(_ context.Context, query string, opts SearchOptions) (*SearchResponse, error) {
|
||
topK := normalizeTopK(opts.TopK, 5, 20)
|
||
|
||
// 1. 准备 2 条模拟数据,覆盖核心字段(title/url/snippet/domain/published_at);
|
||
// 2. 若调用方 topK=1 则只返回第一条。
|
||
mockItems := []SearchItem{
|
||
{
|
||
Title: fmt.Sprintf("搜索结果示例 - %s", query),
|
||
URL: "https://example.com/search-result-1",
|
||
Snippet: "这是 MockProvider 返回的模拟搜索摘要,用于验证工具链路是否通畅。",
|
||
Domain: "example.com",
|
||
PublishedAt: time.Now().Add(-24 * time.Hour),
|
||
},
|
||
{
|
||
Title: fmt.Sprintf("相关资料 - %s", query),
|
||
URL: "https://example.com/related-resource-2",
|
||
Snippet: "这是第二条 Mock 结果,模拟同主题下的补充信息来源。",
|
||
Domain: "example.com",
|
||
PublishedAt: time.Now().Add(-48 * time.Hour),
|
||
},
|
||
}
|
||
|
||
if topK < len(mockItems) {
|
||
mockItems = mockItems[:topK]
|
||
}
|
||
|
||
return &SearchResponse{
|
||
Query: query,
|
||
Items: mockItems,
|
||
}, nil
|
||
}
|