新闻详情

新闻详情

首页 / 资讯中心 / 详情

pi agent源码解读之StreamFn

发布时间:2026/9/30 2:07:43来源:尧图网络
pi agent源码解读之StreamFn
1. 先理解问题:Agent 核心为什么不应该绑定 Provider一个 Agent 通常负责:保存对话状态;把用户消息加入上下文;请求模型生成回复;解析增量文本;识别工具调用;执行工具;把工具结果追加回上下文;继续下一轮模型请求。其中第 3 步才真正涉及模型供应商:Agent Loop │ ├─ 准备上下文 ├─ 调用模型生成回复 ← Provider 相关 ├─ 处理文本增量 ├─ 执行 Tool └─ 继续循环如果 Agent 核心直接写:import{streamAnthropic}from"...";import{streamOpenAI}from"...";那么核心就会依赖具体 Provider,带来几个问题:Agent 包必须安装所有 Provider SDK;增加新 Provider 时需要修改 Agent 核心;测试必须真正模拟或连接具体模型;用户无法方便地注入代理、缓存、重试、路由或本地模型;Agent 核心与模型鉴权、HTTP、API 格式耦合。Pi 的做法是把“请求模型并获得事件流”抽象成一个函数类型:StreamFn。2.StreamFn是什么定义位于:packages/agent/src/types.ts:33核心类型是:exporttypeStreamFn=(model:ModelApi,context:TranscriptContext,options?:SimpleStreamOptions,)=AssistantMessageEventStream|PromiseAssistantMessageEventStream;可以把它理解为:给我: - 一个模型描述 - 一份已经整理好的对话上下文 - 一些请求选项 返回: - 一个 AssistantMessageEventStream它的职责非常明确:StreamFn = 模型调用适配器Agent 不关心这个函数内部是:OpenAI Chat Completions;Anthropic Messages;Google Generative AI;Azure;Bedrock;本地 Ollama;远程代理;测试用 Mock;自己实现的 RPC 服务。Agent 只依赖统一的返回类型:AssistantMessageEventStream3. Agent 核心如何注入streamFnAgentOptions要求传入streamFn:// packages/agent/src/agent.ts:113exportinterfaceAgentOptions{initialState?:AgentInitialState;convertToLlm?:(messages:AgentMessage[])=Message[]|PromiseMessage[];transformContext?:(...);streamFn:StreamFn;...}构造 Agent 时:constagent=newAgent({initialState:{model,},streamFn,});Agent 会保存这个函数:// packages/agent/src/agent.ts:194publicstreamFunction:StreamFn;构造函数中完成注入:// packages/agent/src/agent.ts:230this.streamFunction=runtimeOptions.streamFn??getDefaultStreamFn(
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

企业级LLM落地:从知识库到Agent编排的完整路径 2026/9/30 15:56:09

企业级LLM落地:从知识库到Agent编排的完整路径

做企业级LLM落地这几年,我最大的感受是:真正难的不是模型本身,而是怎么把模型放进企业的业务流程里。这篇是“企业级LLM”系列的第五篇,重点聊一聊知识库建设到Agent编排这一条完整的落地路径。无论你是刚准备给公司搭一套知识问答…

阅读更多 →
AI Agent框架核心组件拆解与从零实现指南 2026/9/30 15:56:09

AI Agent框架核心组件拆解与从零实现指南

1. 先弄清楚:AI Agent到底是个什么东西这两年“AI Agent”几乎成了大模型圈子里最热的关键词,GitHub上各种agent框架层出不穷,从AutoGPT到LangChain再到各种类OpenClawd的开源项目,名字多得让人眼花缭乱。但如果你真的动手去搭一个…

阅读更多 →
RabbitMQ核心实战:消息队列原理、安装部署与选型对比 2026/9/30 15:56:08

RabbitMQ核心实战:消息队列原理、安装部署与选型对比

1. RabbitMQ到底解决了什么问题:先搞清楚它存在的意义我最早接触RabbitMQ是在一个订单系统里。当时系统还是传统的同步调用,用户下单后要依次扣库存、走支付、发通知,高峰期数据库直接被拖垮。后来把下单后的非核心动作全部丢进消息队列&…

阅读更多 →
大型企业数据中心建设方案:从架构设计到割接验证的全流程实践 2026/9/30 15:56:08

大型企业数据中心建设方案:从架构设计到割接验证的全流程实践

简介:《大型企业数据中心建设方案》是一份面向企业IT架构师、数据中心规划人员及运维工程师的Word文档,针对传统数据中心硬件利用率低、运维复杂、扩展性差与能耗偏高等痛点,提出整合、虚拟化、自动化、绿色化四大核心架构方向。文档共1个doc…

阅读更多 →
JDBC调用Oracle存储过程传RECORD参数:SQLData与数组两种方案详解 2026/9/30 15:56:08

JDBC调用Oracle存储过程传RECORD参数:SQLData与数组两种方案详解

1. 为什么JDBC天生处理不了RECORD:先搞懂Oracle类型体系再说 先说个扎心的现实:Oracle的RECORD类型,从设计上就不是给外部程序用的。 我早年第一次在项目里遇到这个需求时,心里也嘀咕过——Java这边封装好的实体类,对…

阅读更多 →
E-bike出海营销从参数战到生活方式:海外网红内容策略全拆解 2026/9/30 15:55:54

E-bike出海营销从参数战到生活方式:海外网红内容策略全拆解

E-bike这两年在海外市场的变化,从营销内容里看得最清楚。去年很多品牌还在拿参数说话:48V电机、15Ah电池、标称续航100公里、液压碟刹。今年刷到的内容已经换了一副面孔——通勤的人骑着它穿过清晨的街道,周末一家三口拖着露营车去郊外&#…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉