96SEO 2026-08-01 22:33 2
按理说,
在传统的 ChatModel 方式中。每一次调用都像是一次全新的 HTTP 请求,导致模型无法记住之前的上下文。这种“记忆缺失”往往让开发者在实现多轮对话时频繁手动拼接历史消息,既繁琐又容易出错。
当我们仅使用 ChatModel 时每次调用都是独立的,对话历史需要自己维护并手工传递。

同一段逻辑要在不同场景下复用,比如开启流式输出、添加工具调用等,都需要额外改动。按理说,
直接调用模型后错误捕获、日志记录还有后续监控往往散落在业务层,缺乏统一管理。
这里通过 Agent + Runner 的组合来解决上述痛点,实现真正意义上的多轮连续对话。
| ChatModel | Agent + Runner | |
|---|---|---|
| 底层组件定位 | 单一请求/响应 | 封装 SDK + 事件流管理 |
| 上层封装与对话管理 | 每次独立。多轮手动拼接 | 自动加 system prompt、统一事件流处理 |
从打个比方来看,ChatModel 像直接发 HTTP 请求;Agent 则像一个 SDK,帮你完成 system prompt、输出格式等常规工作。
// 创建 Agent
agent,_ := adk.NewChatModelAgent(ctx,&adk.ChatModelAgentConfig{
Instruction: "你是个助手",Model: cm,})
// 创建 Runner
runner := adk.NewRunner(ctx。adk.RunnerConfig{
说到Agent,agent,EnableStreaming: true,})
// 多轮对话
history := *schema.Message{}
for {
history = append)
events := runner.Run
reply := collectReply
history = append)
}
`Instruction` 字段会自动变成 SystemMessage,无需手工构造。
messages := *schema.Message{
schema.SystemMessage,schema.UserMessage,}
stream,_ := cm.Stream
}
agent。_ := adk.NewChatModelAgent(ctx,&adk.ChatModelAgentConfig{
Instruction: "你是个助手",Model: cm,})
// Run 时只传 UserMessage 即可
events := runner.Run
}
A Runner is executor of an Agent. 给它一个 Agent 和输入,它会返回一个事件流,而不是直接返回文本。这样做能把生命周期管理、状态维护和事件分发集中起来让业务层更专注于业务逻辑而不是细节。
// 示例
runner := adk.NewRunner(ctx,adk.RunnerConfig{
Agent的观点是,agent,EnableStreaming: true。})
events := runner.Run // 返回事件流
}
A Agent 本身并不存储历史。实现多轮会把完整历史作为参数传进去。从例如来看,
// 第一轮
history =
// 模型回复:"你好!"
// 第二轮
history =
// 模型能看到完整上下文。回复:"你说了你好"
}
从关键要点来看,每次调用都带上完整历史;因为历史增长,上下文也随之丰富。
A Runner 返回的是一个事件流而非直接文本。此事件流像管道一样,将每一步结果实时推送给使用者。
events := runner.Run
for {
event,ok := events.Next
if!ok { break } // 流结束
if event.Err!= nil { /* 处理错误 */ }
mv := event.Output.MessageOutput
if mv.Role!= schema.Assistant { continue }
if mv.IsStreaming {
for {
frame,err := mv.MessageStream.Recv
if errors.Is { break }
fmt.Print
}
} else {
fmt.Print
}
}
}
为什么要事件流?因为以后加入工具调用,只需在同一条流水线中插入工具事件,不必改业务逻辑;所有输出统一从同一源读取.
# Struct Overview: AgentEvent{ ├── Err // 错误 ├── Output { └── MessageOutput { ├── Role // Assistant / User / System / Tool ├── IsStreaming // 是否流式 ├── Message // 非流式时完整消息 └── MessageStream // 流式时 StreamReader {
`ToolCall` / `Action` fields for tool invocation and control directives.
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback