remove
This commit is contained in:
parent
582c29d50c
commit
1f159ed749
88
课件资料/0.大纲.md
88
课件资料/0.大纲.md
|
|
@ -1,88 +0,0 @@
|
|||
# 总大纲:AI应用落地(Agent + 工作流融合实战)
|
||||
|
||||
总时长:72分钟(1.2小时)
|
||||
|
||||
## 0 开场与目标(3分钟)
|
||||
|
||||
- 主题与目标:让后端 Go 团队“又快又稳”做出可用的 AI 应用
|
||||
- 一句话定位:Agent 负责“聪明与解释”,工作流保障“稳定与规模”
|
||||
- 贯穿案例:订单诊断(降低 MTTR/人工接管率、提升稳定性)
|
||||
|
||||
## 1 概念与融合(10分钟)
|
||||
|
||||
- 什么是 Agent:意图识别、工具选择、策略决策、结果解释与对话管理
|
||||
- 什么是工作流:确定性算子编排、状态与数据管理、幂等与重试、失败回退、审计与监控
|
||||
- 优缺点对比:
|
||||
- Agent:灵活、可解释;成本不稳定、可能不一致
|
||||
- 工作流:稳定、可控、低成本;表达复杂判断困难、解释弱
|
||||
- 融合方案(职责边界与组合模式):
|
||||
- 入口路由:Agent 基于意图调用不同工作流
|
||||
- 工作流内嵌决策:复杂判断节点由 Agent 决策,其余节点确定性执行
|
||||
- 管理者-执行者:Manager Agent 分配任务,工作流封装工具完成
|
||||
- 常见坑:多 Agent 过度设计、记忆与任务状态混淆、工具幂等缺失
|
||||
|
||||
## 2 技术演进(6分钟)
|
||||
|
||||
- 手工时代 → 智能体时代 → 工业化时代(精简版)
|
||||
- 结论:从能用到好用,标准化与可观测是必经之路(不单设页面)
|
||||
|
||||
## 3 需求识别(12分钟)
|
||||
|
||||
- 三招判断:频次、复杂度、容错
|
||||
- 适用与不适用:规则清晰/100%准确/一次性工作不适合 AI
|
||||
- 场景映射:订单诊断、商品分析、文库问答
|
||||
- 回退策略:从 AI 回退为代码/规则引擎的判断标准
|
||||
|
||||
## 4 选型建议(12分钟)
|
||||
|
||||
- 部署方式:供应商(API/Agent/工作流) vs 私有化(云/本地)
|
||||
- 语言选择:阶段化策略(原型优先 Python;生产优先 Go),纯 Go 团队可直接上 Go
|
||||
- 框架推荐:
|
||||
- Python:LangChain/LangGraph(原型与功能全)
|
||||
- Go:Eino、LangChainGo(生产与性能)
|
||||
- 硬件与模型容量:
|
||||
- 7B:16G 显存可行(量化更稳)
|
||||
- 14B:建议 24–48G 显存;16G 需重度量化且质量折衷
|
||||
- 私有化阈值(简易测算):月 API 费用 ≈ 硬件折旧/月 + 运维人力/月 + 合规需求 → 达到阈值再考虑自建
|
||||
|
||||
## 5 实战演示(24分钟)
|
||||
|
||||
- Python 快速原型(10分钟):
|
||||
- 用 LangChain/LangGraph 搭“订单诊断”工作流:订单查询→支付网关→风控规则→异常解释
|
||||
- 监控:LangSmith 指标与问题定位
|
||||
- Go 生产化(10分钟):
|
||||
- 框架:Eino / LangChainGo;HTTP 层(Gin/Hertz)
|
||||
- 目录结构:
|
||||
- `cmd/` 服务入口
|
||||
- `internal/agent/` 意图识别与解释
|
||||
- `internal/workflow/` 节点编排、重试与回退
|
||||
- `internal/tools/` 订单/支付/风控等工具封装
|
||||
- `internal/observability/` 指标、日志、trace
|
||||
- `pkg/` 通用库;`api/` 接口定义(OpenAPI/gRPC)
|
||||
- 工程要点:幂等、错误码、超时/熔断、重试与任务重放
|
||||
- 传输与体验(4分钟):
|
||||
- 流式对比:SSE(浏览器友好、单向) vs WebSocket(双向、状态管理) vs HTTP Streaming(解析复杂) vs gRPC 流(强类型、需网关)
|
||||
- 选择建议:前端优先 SSE;双向需 WebSocket;内网优先 gRPC/HTTP2
|
||||
- 降低等待焦虑:预热与缓存、渐进式输出(先要点后细节)、并行查询与最慢支路降级、心跳与重连
|
||||
|
||||
## 6 成本评估与阶段化私有化(4分钟)
|
||||
|
||||
- 在线指标:成功率、P95 延迟、令牌用量、调用成本、重试次数、人工接管率
|
||||
- 监控盲点:上下文与工具调用的隐性令牌、未分场景/版本统计
|
||||
- 阶段化决策:先供应商跑通 + 完整监控 → 达阈值再私有化;含合规与数据敏感评估
|
||||
|
||||
## 7 总结(1分钟)
|
||||
|
||||
- 选择 > 实现,适合 > 先进;Agent + 工作流是通用融合方案
|
||||
- 一套模板 + 一套度量与监控 → 快速落地、可持续优化
|
||||
|
||||
## 8 相关资源(1分钟)
|
||||
|
||||
- LangChain:<https://docs.langchain.com/oss/python/langchain/overview>
|
||||
- LangGraph:<https://docs.langchain.com/oss/langgraph/>
|
||||
- Eino 框架:<https://github.com/cloudwego/eino>
|
||||
- LangChainGo:<https://github.com/tmc/langchaingo>
|
||||
- Coze(可视化):<https://www.coze.cn/opensource>
|
||||
- Coze Studio(本地部署):<https://github.com/coze-dev/coze-studio>
|
||||
- Coze Loop(监控):<https://github.com/coze-dev/coze-loop>
|
||||
- 内部模板与评测集:公司知识库/代码模板(按团队链接补充)
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
# 开场白
|
||||
|
||||
**【承上启下,建立技术演进的连贯性】**
|
||||
|
||||
前面我们学习了AI原理和部署实践,
|
||||
那今天呢?我想和大家聊聊:AI到底该怎么'用好'?
|
||||
|
||||
**【痛点共识】**
|
||||
|
||||
- 算法懂了、模型也能跑,但落地时到底该用 Agent 还是工作流?
|
||||
- SSE、WebSocket、HTTP 流到底怎么选,用户等待体验怎么优化?
|
||||
- 供应商 vs 私有化怎么权衡,成本到什么阶段再自建?
|
||||
|
||||
**【今天我们做什么】**
|
||||
|
||||
- 用一个真实案例(订单诊断)贯穿:Agent 负责意图与解释,工作流负责确定性执行与回退重试
|
||||
- 给出阶段化选型:原型用 Python,生产用 Go(Eino/LangChainGo),并给出目录模板与工程要点
|
||||
- 拆解流式传输与体验优化:选择建议、并行与降级、渐进式输出
|
||||
- 评估成本与私有化阈值:用数据而不是感觉做决定
|
||||
|
||||
**【你将带走】**
|
||||
|
||||
- 可直接复用的 Go 项目目录模板与 Python 原型示例
|
||||
- 流式传输最佳实践与选择建议
|
||||
- 一套成本评估与私有化决策表
|
||||
- 常见坑清单与规避方法(幂等、错误码、记忆与状态分离)
|
||||
|
||||
**【一句话总结】**
|
||||
|
||||
选择 > 实现,适合 > 先进;聪明交给 Agent,稳定交给工作流。
|
||||
|
||||
**【开始吧】**
|
||||
|
||||
接下来 72 分钟,我们用融合方案把“能用”变成“好用、可持续”。
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
# 承上启下:技术演进与主题定位
|
||||
|
||||
## 技术演进三阶段
|
||||
- 手工时代:Prompt 手工打造,结果不稳定、不可复制
|
||||
- 智能体时代:能记忆与调工具,但仍是作坊式、效率有限
|
||||
- 工业化时代:标准化流程、质量可控、批量复制
|
||||
|
||||
## 主题定位(一句话)
|
||||
- 聪明交给 Agent,稳定交给工作流;两者融合,既好用又可规模复制
|
||||
|
||||
## 课程收益与贯穿案例
|
||||
- 收益:更快选型、更稳上线、更好用户体验、更清晰成本评估
|
||||
- 案例:订单诊断(降低 MTTR、减少人工接管率)
|
||||
|
||||
## 今日路线图
|
||||
- Python 快速原型 → Go 生产化 → 传输与体验优化 → 成本评估与私有化阈值
|
||||
## 一句话总结
|
||||
主题定位:Agent 负责聪明与解释,工作流保障稳定与规模。
|
||||
## 一句话引出
|
||||
进入“融合方案”,明确职责边界与组合模式。
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# 融合方案:Agent × 工作流
|
||||
|
||||
## Agent 的职责
|
||||
- 意图识别与对话管理
|
||||
- 工具选择与策略性决策
|
||||
- 结果解释与可解释性输出
|
||||
|
||||
## 工作流的职责
|
||||
- 确定性算子编排与数据读写
|
||||
- 状态管理、幂等、重试与失败回退
|
||||
- 审计与监控、指标采集
|
||||
|
||||
## 组合模式
|
||||
- 入口路由:Agent 基于意图调用不同工作流
|
||||
- 工作流内嵌决策:复杂判断节点由 Agent 决策,其余确定性执行
|
||||
- 管理者-执行者:Manager Agent 分配任务,工作流执行工具
|
||||
|
||||
## 边界与协作
|
||||
- 记忆 vs 任务状态分离:避免业务状态污染对话记忆
|
||||
- 工具接口规范:输入输出、错误码、幂等与超时/熔断
|
||||
- 回退与人机协同:失败分支、人工接管入口、任务重放
|
||||
|
||||
## 常见坑与规避
|
||||
- 多 Agent 过度设计 → 一个入口 Agent + 工作流主干
|
||||
- 幂等缺失与错误码混乱 → 无法重试与回退
|
||||
- 监控缺失 → 无法定位问题与评估成本
|
||||
## 一句话总结
|
||||
边界清晰、模式够用、契约完备,才能让融合方案在生产可控。
|
||||
## 一句话引出
|
||||
下节将把融合范式映射到具体场景与选型。
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
# 场景识别与技术选型
|
||||
|
||||
## 三招判断适配度
|
||||
- 频次:是否每天出现
|
||||
- 复杂度:是否需要看多个因素
|
||||
- 容错:是否允许偶尔错误
|
||||
|
||||
## 不适用的边界
|
||||
- 规则清晰 → 用代码/规则引擎更稳更便宜
|
||||
- 要求 100% 准确 → AI 不合适
|
||||
- 一次性工作 → 人工处理即可
|
||||
|
||||
## 部署选型
|
||||
- 供应商(API/Agent/工作流):验证快、维护省心、需评估数据外流
|
||||
- 私有化(云/本地):数据可控、长期成本可控、需工程与运维投入
|
||||
|
||||
## 语言与框架
|
||||
- 原型:Python(LangChain、LangGraph)
|
||||
- 生产:Go(Eino、LangChainGo)
|
||||
- 团队策略:纯 Go 团队可直接 Go,但建议保留原型快速验证
|
||||
|
||||
## 私有化阈值与硬件预算
|
||||
- 模型容量:7B≈16G 显存;14B建议 24–48G 显存(16G 需重度量化)
|
||||
- 阈值测算:月 API 费用 ≈ 硬件折旧/月 + 运维人力/月 + 合规需求
|
||||
## 一句话总结
|
||||
先用数据选场景与方案,原型快跑,生产稳落,达到阈值再私有化。
|
||||
## 一句话引出
|
||||
随后进入“实战落地”,用订单诊断完成端到端演示。
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# 实战落地:架构、传输与成本评估
|
||||
|
||||
## 案例流程(订单诊断)
|
||||
- 节点:订单查询 → 支付网关 → 风控规则 → 异常解释
|
||||
- 分支:失败回退、重试策略、人工接管入口
|
||||
|
||||
## Python 原型要点
|
||||
- LangChain/LangGraph 搭建工作流
|
||||
- LangSmith 指标与问题定位
|
||||
|
||||
## Go 生产要点
|
||||
- 框架:Eino / LangChainGo;HTTP 层(Gin/Hertz)
|
||||
- 目录结构:`cmd/`、`internal/agent`、`internal/workflow`、`internal/tools`、`internal/observability`、`pkg/`、`api/`
|
||||
- 工程要点:幂等、错误码、超时/熔断、重试与任务重放
|
||||
|
||||
## 传输与体验
|
||||
- SSE:浏览器友好、单向推送、实现简单
|
||||
- WebSocket:双向、低延迟、需心跳与状态管理
|
||||
- HTTP Streaming:保持 HTTP 语义,前端解析更复杂
|
||||
- gRPC 流:双向流、性能好、Web 需网关
|
||||
- 降低等待焦虑:预热与缓存、渐进式输出、并行查询与最慢支路降级、心跳与重连
|
||||
|
||||
## 成本与度量
|
||||
- 在线指标:成功率、P95 延迟、令牌用量、调用成本、重试次数、人工接管率
|
||||
- 监控盲点:上下文与工具调用的隐性令牌、未分场景/版本统计
|
||||
- 阶段化私有化:先供应商 + 完整监控 → 达阈值再自建
|
||||
## 一句话总结
|
||||
用融合方案跑通端到端,并以指标闭环驱动体验与成本优化。
|
||||
## 一句话引出
|
||||
最后收束到“课程总结与资源”,附行动清单与评测模板。
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
# WPS 智能PPT生成提示文档:AI应用落地(Agent × 工作流融合实战)
|
||||
|
||||
## 全局参数
|
||||
- 听众画像:后端 Go 开发,具备基础 AI 应用认知
|
||||
- 目标:理解并掌握“Agent + 工作流”融合范式,能快速原型与稳定生产化
|
||||
- 风格:简洁、工程化、数据驱动;少段落,多要点;配图清晰
|
||||
- 配色:主色蓝灰(#2F5D8A / #4A4A4A),强调色橙(#F59E0B)
|
||||
- 字体:中文用思源黑体/微软雅黑,英文字体用 Inter/Roboto
|
||||
- 页数建议:18–20 页;每页遵循“标题/一句话金句/三要点/图示建议”结构
|
||||
- 图形偏好:流程图、架构图、对比表;避免花哨背景与过多动画
|
||||
- 术语一致:Agent、工作流、SSE、WebSocket、HTTP Streaming、gRPC、MTTR、P95、令牌
|
||||
|
||||
## 目录与每页内容
|
||||
1. 标题页
|
||||
- 金句:选择 > 实现,适合 > 先进
|
||||
- 要点:主题、讲师、时间
|
||||
- 图示:主题封面图(抽象线路/节点)
|
||||
|
||||
2. 开场与目标
|
||||
- 金句:聪明交给 Agent,稳定交给工作流
|
||||
- 要点:听众画像、课程目标、贯穿案例(订单诊断)
|
||||
- 图示:课程目标图标组
|
||||
|
||||
3. 承上启下:技术演进
|
||||
- 金句:从手工到工业化,核心是标准化与可观测
|
||||
- 要点:手工→智能体→工业化;问题与改进;度量意识
|
||||
- 图示:时间轴
|
||||
|
||||
4. 融合方案总览
|
||||
- 金句:边界清晰、模式够用、契约完备
|
||||
- 要点:Agent 职责;工作流职责;融合收益
|
||||
- 图示:双层架构图(Agent 外层、工作流主干)
|
||||
|
||||
5. 组合模式与职责边界
|
||||
- 金句:入口路由、内嵌决策、管理者-执行者
|
||||
- 要点:三种模式;适用场景;边界约束(记忆vs状态)
|
||||
- 图示:三模式示意图
|
||||
|
||||
6. 常见坑与规避
|
||||
- 金句:少而精的 Agent + 可观测工作流
|
||||
- 要点:过度多Agent;幂等与错误码缺失;监控缺失
|
||||
- 图示:问题→对策表
|
||||
|
||||
7. 场景识别三招
|
||||
- 金句:频次、复杂度、容错三步筛选
|
||||
- 要点:三招定义;通过案例映射;回退边界
|
||||
- 图示:打勾/打叉列表
|
||||
|
||||
8. 不适用边界
|
||||
- 金句:能编程就别用 AI;必须 100% 准确也别用
|
||||
- 要点:规则清晰、100%准确、一次性工作
|
||||
- 图示:红线边界卡片
|
||||
|
||||
9. 部署选型
|
||||
- 金句:先供应商跑通,达阈值再私有化
|
||||
- 要点:供应商(API/Agent/工作流);私有化(云/本地)优缺点
|
||||
- 图示:对比表
|
||||
|
||||
10. 语言与框架
|
||||
- 金句:原型 Python,生产 Go;纯 Go 团队可直接 Go
|
||||
- 要点:LangChain/LangGraph;Eino/LangChainGo;生态与工程取舍
|
||||
- 图示:栈对比图
|
||||
|
||||
11. 私有化阈值与硬件预算
|
||||
- 金句:用数据而不是感觉做决定
|
||||
- 要点:月 API 费测算;自建=硬件折旧+运维+合规;显存容量:7B≈16G,14B建议24–48G(16G重度量化)
|
||||
- 图示:简易成本公式与条形图
|
||||
|
||||
12. 架构总览(订单诊断)
|
||||
- 金句:入口 Agent + 主干工作流,端到端闭环
|
||||
- 要点:输入/输出;节点与分支;回退与人工接管
|
||||
- 图示:端到端流程图
|
||||
|
||||
13. 传输与体验(对比)
|
||||
- 金句:前端优先 SSE;双向用 WebSocket;内网优先 gRPC/HTTP2
|
||||
- 要点:SSE/WebSocket/HTTP Streaming/gRPC 优劣;心跳与重连;渐进式输出与并行降级
|
||||
- 图示:对比表 + 时序图
|
||||
|
||||
14. Python 原型演示
|
||||
- 金句:快速搭建、可观测、可回放
|
||||
- 要点:LangChain/LangGraph;LangSmith 监控;评测集与回放
|
||||
- 图示:原型架构与监控截图占位
|
||||
|
||||
15. Go 生产化演示
|
||||
- 金句:目录清晰、契约完备、稳定可扩展
|
||||
- 要点:Eino/LangChainGo;`cmd/`、`internal/*`、`pkg/`、`api/`;幂等/错误码/重试/熔断
|
||||
- 图示:目录结构树与依赖图
|
||||
|
||||
16. 工程要点(可靠性)
|
||||
- 金句:幂等与错误码是重试与回退的根基
|
||||
- 要点:超时/熔断;任务重放;死信与恢复策略
|
||||
- 图示:容错链路图
|
||||
|
||||
17. 成本与度量
|
||||
- 金句:指标闭环驱动优化与私有化决策
|
||||
- 要点:成功率、P95、令牌、成本、重试、人工接管率;监控盲点与分维度统计
|
||||
- 图示:指标仪表盘占位
|
||||
|
||||
18. 总结与行动清单
|
||||
- 金句:模板 + 度量与监控 → 快速落地、可持续优化
|
||||
- 要点:选一个场景;填选型表;套模板;算成本账
|
||||
- 图示:清单卡片
|
||||
|
||||
19. 相关资源
|
||||
- 金句:拿来即用的外部文档与内部模板
|
||||
- 要点:LangChain、LangGraph、Eino、LangChainGo、Coze、Coze Studio、Coze Loop、内部知识库链接
|
||||
- 图示:资源链接卡片
|
||||
|
||||
## 版式与生成要求
|
||||
- 每页结构:主标题(不超过14字)+ 一句话金句(不超过20字)+ 三要点(每条不超过18字)+ 图示建议(一句话)
|
||||
- 避免长段落;对比用表格;流程用箭头;术语保持一致
|
||||
- 所有英语缩写保留原文:SSE、gRPC、HTTP/2、MTTR、P95
|
||||
- 优先白底深色文字;强调色仅用于关键字或数据
|
||||
|
||||
## 演讲备注(可选)
|
||||
- 强调“融合范式”的方法论与工程可操作性
|
||||
- 贯穿案例用“订单诊断”,度量指标贯穿始终
|
||||
- 传输体验与成本评估是实战关键,不可略过
|
||||
|
||||
## 生成后校对清单
|
||||
- 术语统一;硬件容量数字正确(14B→24–48G 显存建议)
|
||||
- SSE/WebSocket/gRPC 对比无缺项;有心跳与重连要点
|
||||
- 目录结构页包含 `cmd/`、`internal/agent`、`internal/workflow`、`internal/tools`、`internal/observability`、`pkg/`、`api/`
|
||||
- 成本页包含公式与分维度指标
|
||||
174
课件资料/代码.md
174
课件资料/代码.md
|
|
@ -1,174 +0,0 @@
|
|||
# 代码示例
|
||||
|
||||
langchain生态
|
||||
|
||||
- Chain
|
||||
|
||||
```python
|
||||
async def main():
|
||||
prompt = ChatPromptTemplate.from_messages([
|
||||
("system", "你是一个友好、专业的AI助手。"),
|
||||
("human", "{input}")
|
||||
])
|
||||
|
||||
# 2) 定义模型(按你本地 Ollama 配置调整)
|
||||
model = ChatOllama(
|
||||
model="qwen3:8b", # 或你的实际模型名
|
||||
base_url="http://localhost:11434"
|
||||
)
|
||||
|
||||
# 3) 定义输出解析器,将 AIMessage 转字符串
|
||||
parser = StrOutputParser()
|
||||
|
||||
# 4) 组合为表达式管道
|
||||
chain = prompt | model | parser
|
||||
|
||||
# 非流式调用
|
||||
text = await chain.ainvoke({"input": "请用一句话做自我介绍"})
|
||||
print("非流式:", text)
|
||||
|
||||
# 流式调用
|
||||
print("流式:", end="", flush=True)
|
||||
async for chunk in chain.astream({"input": "讲一个简短的笑话"}):
|
||||
print(chunk, end="", flush=True)
|
||||
```
|
||||
|
||||
- Graph
|
||||
|
||||
```python
|
||||
# 创建状态图
|
||||
async def main():
|
||||
workflow = StateGraph(WorkflowState)
|
||||
|
||||
# 添加节点
|
||||
workflow.add_node("intent_analysis", self._intent_analysis_wrapper)
|
||||
workflow.add_node("order_diagnosis", self._order_diagnosis_wrapper)
|
||||
workflow.add_node("natural_chat", self._natural_chat_wrapper)
|
||||
|
||||
# 设置入口点
|
||||
workflow.set_entry_point("intent_analysis")
|
||||
|
||||
# 添加条件边
|
||||
workflow.add_conditional_edges(
|
||||
"intent_analysis",
|
||||
self._route_after_intent_analysis,
|
||||
{
|
||||
"order_diagnosis": "order_diagnosis",
|
||||
"natural_chat": "natural_chat",
|
||||
"end": END
|
||||
}
|
||||
)
|
||||
|
||||
# 添加结束边
|
||||
workflow.add_edge("order_diagnosis", END)
|
||||
workflow.add_edge("natural_chat", END)
|
||||
|
||||
# 编译图
|
||||
agent = workflow.compile()
|
||||
|
||||
messages = [HumanMessage(content="Add 3 and 4.")]
|
||||
messages = agent.invoke({"messages": messages})
|
||||
for m in messages["messages"]:
|
||||
print(m.content)
|
||||
```
|
||||
|
||||
对应流程图(Mermaid)
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
IA[intent_analysis] --> ROUTE{判断意图}
|
||||
ROUTE -->|order_diagnosis| OD[order_diagnosis]
|
||||
ROUTE -->|natural_chat| NC[natural_chat]
|
||||
ROUTE -->|end| END((END))
|
||||
|
||||
OD --> END
|
||||
NC --> END
|
||||
```
|
||||
|
||||
说明:当意图分析结果为空或不满足条件时,视为“否”分支,进入 `natural_chat`。
|
||||
|
||||
- Agent
|
||||
|
||||
```python
|
||||
from langchain.agents import create_agent
|
||||
|
||||
def get_weather(city: str) -> str:
|
||||
"""Get weather for a given city."""
|
||||
return f"It's always sunny in {city}!"
|
||||
|
||||
agent = create_agent(
|
||||
model="claude-sonnet-4-5-20250929",
|
||||
tools=[get_weather],
|
||||
system_prompt="You are a helpful assistant",
|
||||
)
|
||||
|
||||
# Run the agent
|
||||
agent.invoke(
|
||||
{"messages": [{"role": "user", "content": "what is the weather in sf"}]}
|
||||
)
|
||||
```
|
||||
|
||||
Go生态
|
||||
|
||||
- chain
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/cloudwego/eino/compose"
|
||||
"github.com/cloudwego/eino/components/prompt"
|
||||
"github.com/cloudwego/eino/schema"
|
||||
"github.com/cloudwego/eino-ext/components/model/openai"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
|
||||
// 1) 定义 ChatTemplate(输入键:query),使用 Jinja2 格式
|
||||
pt := prompt.FromMessages(
|
||||
schema.Jinja2,
|
||||
schema.SystemMessage("你是一个友好的AI助手。请用中文回答。"),
|
||||
schema.UserMessage("用户问题:{{query}}"),
|
||||
)
|
||||
|
||||
// 2) 创建 ChatModel(以 OpenAI 为例,按需替换为其他提供商)
|
||||
cm, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{
|
||||
APIKey: os.Getenv("OPENAI_API_KEY"),
|
||||
BaseURL: os.Getenv("OPENAI_BASE_URL"), // 可选,自建或代理时设置
|
||||
Model: os.Getenv("MODEL_NAME"), // 例如:"gpt-4o-mini"
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("初始化模型失败:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 3) 组合并编译 Chain:模板 -> 模型
|
||||
chain, err := compose.NewChain[map[string]any, *schema.Message]().
|
||||
AppendChatTemplate(pt). // prompt
|
||||
AppendChatModel(cm). // model
|
||||
// AppendBranch 分支
|
||||
// AppendPassthrough 空透传节点
|
||||
// AppendParallel 并行节点
|
||||
// AppendGraph 子图节点
|
||||
// AppendLambda 自定义函数节点
|
||||
Compile(ctx) // 编译链
|
||||
if err != nil {
|
||||
fmt.Println("编译链失败:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 4) 调用链(非流式)
|
||||
msg, err := chain.Invoke(ctx, map[string]any{"query": "简要介绍一下 Eino 的 Chain"})
|
||||
if err != nil {
|
||||
fmt.Println("调用失败:", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("回复:", msg.Content)
|
||||
}
|
||||
```
|
||||
Loading…
Reference in New Issue