Fabric Contexts 与 Sessions 实战指南:对话状态管理与可复用提示词注入
Fabric Contexts 与 Sessions 实战指南对话状态管理与可复用提示词注入【免费下载链接】FabricFabric is an open-source framework for augmenting humans using AI. It provides a modular system for solving specific problems using a crowdsourced set of AI prompts that can be used anywhere.项目地址: https://gitcode.com/GitHub_Trending/fa/FabricFabric 通过Contexts上下文与Sessions会话两套机制管理对话状态与可复用的提示词数据Context 将命名文本以系统消息形式注入对话开头Session 则持久化完整的消息历史。本文基于 docs/contexts-and-sessions-tutorial.md 展开结合仓库源码internal/core/chatter.go、internal/plugins/db/fsdb 与 internal/server深入讲解二者在 CLI 与 REST API 中的实际用法、底层存储结构与完整调用链读完后你将能熟练使用 Fabric 构建带状态的多轮对话并能为自己的项目扩展 Context/Session 能力。Context 与 Session 的核心概念Context注入对话开头的命名文本Context上下文是 Fabric 在每次对话开始时注入的一段命名文本其内容作为一条system 消息参与模型推理。它可以承载任意可复用的提示词内容例如偏好的写作风格或语气规范领域知识背景医疗、法律、金融等对助手行为的固定指令如始终用中文回答。在磁盘层面Context 存储在~/.config/fabric/contexts目录下每个文件名即 Context 名称文件内容即注入文本。从源码看internal/plugins/db/fsdb/db.go 中 Contexts 实体的定义没有指定文件扩展名这意味着你可以使用任意扩展名或无扩展名的纯文本文件db.Contexts ContextsEntity{ StorageEntity{Label: Contexts, Dir: db.FilePath(contexts)}}而 Sessions 实体的定义则显式指定了.json扩展名internal/plugins/db/fsdb/db.godb.Sessions SessionsEntity{ StorageEntity{Label: Sessions, Dir: db.FilePath(sessions), FileExtension: .json}}Session持久化的对话消息历史Session会话用于追踪一次对话的完整消息历史。当你指定一个会话名称时Fabric 会加载该会话已有的全部消息若存在追加本轮新增的用户消息与模型回复将最新历史写回磁盘。Sessions 以JSON 格式存储在~/.config/fabric/sessions目录下。从源码看internal/plugins/db/fsdb/sessions.go 中 Session 的数据结构为type Session struct { Name string Messages []*chat.ChatCompletionMessage vendorMessages []*chat.ChatCompletionMessage }vendorMessages是内部字段用于向模型供应商发送消息时剔除meta角色的消息internal/plugins/db/fsdb/sessions.go。CLI 命令行实战Context 相关命令Fabric 的 CLI 为 Context 提供了四个核心辅助命令对应定义位于 internal/cli/flags.go命令短选项说明--context name-C选择要使用的 Contextdescription: Choose a context from the available contexts默认值为空字符串--listcontexts-x列出所有可用的 ContextList all contexts--printcontext name—打印指定 Context 的内容Print context--wipecontext name-w删除指定 ContextWipe context典型用法# 列出所有可用的 context fabric --listcontexts # 查看名为 writer 的 context 内容 fabric --printcontext writer # 在对话中使用 writer context fabric --context writer 请审阅我下面的段落 # 删除不再需要的 context fabric --wipecontext old-context--printcontext的底层实现在 internal/plugins/db/fsdb/contexts.go它先调用Get从磁盘加载 Context再将Content打印到标准输出。Session 相关命令Session 同样有四个辅助命令定义于 internal/cli/flags.go命令短选项说明--session name—附加到指定会话Choose a session from the available sessions--listsessions-X列出所有存储的会话List all sessions--printsession name—打印指定会话内容Print session--wipesession name-W删除指定会话Wipe session典型用法# 列出所有会话 fabric --listsessions # 打印某个会话的完整历史 fabric --printsession mychat # 开始/继续一个名为 mychat 的会话 fabric --session mychat 继续上一轮的分析 # 清理历史会话 fabric --wipesession old-chat会话不存在时会自动创建——无需预先初始化。internal/plugins/db/fsdb/sessions.go 的Get方法会先通过ValidateStorageName校验名称合法性然后检查文件是否存在存在则通过LoadAsJson加载消息数组不存在则打印创建新会话提示并返回一个空 Session。日常使用场景Context 与 Session 的分工二者服务于不同的日常需求Context复用提示词文本如偏好风格、领域知识、助手指令。它是静态的、可跨会话共享的。Session维持持续的对话历史让 Fabric 记住之前轮次的交流内容。它是动态的、按会话隔离的。实战工作流示例创建 Context 文件手动在~/.config/fabric/contexts/writer中写入你的写作规范例如语气、句式偏好、禁止事项等。结合 Pattern 使用Context 与 Pattern 可以叠加——Context 注入通用指令Pattern 注入任务型提示词。例如# writer context summarize pattern 命名会话 fabric --context writer --pattern summarize --session mychat 请总结这份会议纪要延续会话下一次直接使用同一会话名继续对话模型会基于完整历史作答fabric --session mychat 基于上次总结再提取三条行动项提示--output-session标志可将整个会话包括临时会话输出到输出文件便于审计与存档该标志同样定义于 internal/cli/flags.go。Context 与 Session 的交互机制当 Fabric 处理一次聊天请求时其核心调用链如下internal/core/chatter.go 的BuildSession方法加载会话若指定了SessionName从数据库读取已有 Session否则新建空 Session。加载 Context若指定了ContextName调用o.db.Contexts.Get(name)获取其文本内容。加载 Pattern若指定了PatternName获取 Pattern 模板含变量替换。拼接系统消息通过joinPromptSections将 Context 内容与 Pattern 内容拼接为系统消息若还指定了策略Strategy策略提示词会置于最前若指定了非英文的Language还会追加用指定语言回答的强化指令。注入与请求系统消息以system角色追加到 Session连同历史消息一起发送给模型。回写会话模型回复以assistant角色session.Append(...)追加并在Send的收尾阶段internal/core/chatter.go通过SaveSession写回磁盘使后续调用延续同一状态。原文档中的关键代码片段对应源码如下internal/core/chatter.go 与 internal/core/chatter.go// if a context name is provided, retrieve it from the database var contextContent string if request.ContextName ! { var ctx *fsdb.Context if ctx, err o.db.Contexts.Get(request.ContextName); err ! nil { err fmt.Errorf(i18n.T(chatter_error_find_context), request.ContextName, err) return } contextContent ctx.Content }systemMessage : joinPromptSections(contextContent, patternContent)注意joinPromptSectionsinternal/core/chatter.go会 trim 各段内容、丢弃空段并以换行拼接——因此即使某个段为空也不会产生多余的空系统消息。REST API 端点详解Fabric 的 REST 服务器暴露了 Context 与 Session 的 CRUD 端点。路由注册位于 internal/server/serve.goNewContextsHandler(r, fabricDb.Contexts) NewSessionsHandler(r, fabricDb.Sessions)原文档列出的四个基础端点GET /contexts/:name– 获取指定 ContextPOST /contexts/:name– 保存指定 Context请求体为原始文本GET /contexts/names– 列出所有 Context 名称GET /sessions/:name– 获取指定 SessionPOST /sessions/:name– 保存指定 SessionGET /sessions/names– 列出所有 Session 名称注意实际仓库中的端点多于文档所列。两个实体共用泛型处理器StorageHandlerinternal/server/storage.go自动注册了以下完整路由方法路径说明GET/{entity}/:name获取单项GET/{entity}/names列出所有名称DELETE/{entity}/:name删除单项GET/{entity}/exists/:name检查是否存在PUT/{entity}/rename/:oldName/:newName重命名POST/{entity}/:name保存请求体即内容其中{entity}对应contexts或sessions。示例# 列出所有 context curl http://localhost:8080/contexts/names # 读取名为 writer 的 context curl http://localhost:8080/contexts/writer # 写入/覆盖一个 context请求体为纯文本 curl -X POST http://localhost:8080/contexts/writer \ --data-binary 你是一名严谨的中文技术编辑…… # 检查会话是否存在 curl http://localhost:8080/sessions/exists/mychat # 读取会话完整 JSON含全部消息数组 curl http://localhost:8080/sessions/mychat存储层安全设计从源码看存储层有明确的安全防护internal/server/storage.goHTTP 处理器会先调用ValidateStorageName定义于 internal/plugins/db/fsdb/storage.go校验名称非法名称返回400合法但读取失败的错误则统一返回500并仅输出泛化错误信息避免将底层绝对文件路径泄露给客户端internal/server/storage.go。开发者视角文件系统存储实现从磁盘加载 Contextinternal/plugins/db/fsdb/contexts.go// Get Load a context from file func (o *ContextsEntity) Get(name string) (ret *Context, err error) { var content []byte if content, err o.Load(name); err ! nil { return } ret Context{Name: name, Content: string(content)} return }Load由基类StorageEntity实现internal/plugins/db/fsdb/storage.go本质是读取~/.config/fabric/contexts/name文件。Configure方法internal/plugins/db/fsdb/storage.go会在启动时MkdirAll创建目录因此首次运行无需手动建目录。会话的加载与保存internal/plugins/db/fsdb/sessions.gofunc (o *SessionsEntity) Get(name string) (session *Session, err error) { if err ValidateStorageName(name); err ! nil { return nil, err } session Session{Name: name} if o.Exists(name) { err o.LoadAsJson(name, session.Messages) } else { fmt.Printf(i18n.T(sessions_creating_new), name) } return } func (o *SessionsEntity) SaveSession(session *Session) (err error) { return o.SaveAsJson(session.Name, session.Messages) }底层SaveAsJson/LoadAsJsoninternal/plugins/db/fsdb/storage.go负责 JSON 序列化/反序列化文件即~/.config/fabric/sessions/name.json。Session.Append在vendorMessages非空时会同步维护两份消息列表确保发给模型的消息始终剔除 meta 角色internal/plugins/db/fsdb/sessions.go。完整的发送调用链Chatter.Sendinternal/core/chatter.go的流程为BuildSession组装含 Context/Pattern/Strategy 的会话session.GetVendorMessages()取出发往模型的净消息流式SendStream或非流式Send调用模型供应商回复追加为 assistant 消息若session.Name ! 则SaveSession持久化。测试验证仓库包含针对 Context 与 Session 的单元测试可帮助你理解预期行为internal/plugins/db/fsdb/contexts_test.go验证ContextsEntity.Get能从磁盘加载并返回Name与Contentinternal/plugins/db/fsdb/sessions_test.go验证会话的获取/创建语义internal/server/path_traversal_test.go覆盖存储名称校验与路径穿越防护。运行测试go test ./internal/plugins/db/fsdb/... ./internal/server/...小结Context 提供可复用的系统级指令Session 维护持续的对话历史二者在 internal/core/chatter.go 的BuildSession中合流Context 文本与 Pattern 文本拼接为 system 消息与完整 Session 历史一同发往模型回复再回写 Session。正是这套机制让 Fabric 得以构建富状态的、可与大语言模型进行多轮深入交互的应用。从 CLI 的--context/--session一族命令到 REST 的/contexts/*与/sessions/*端点再到fsdb的文件系统存储实现整条链路设计清晰、扩展方便是理解 Fabric 对话引擎的关键入口。【免费下载链接】FabricFabric is an open-source framework for augmenting humans using AI. It provides a modular system for solving specific problems using a crowdsourced set of AI prompts that can be used anywhere.项目地址: https://gitcode.com/GitHub_Trending/fa/Fabric创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

oh-my-pi Natives Addon Loader Runtime 深度解析:ESM 入口与已校验 `.node` 原生模块之间的运行时

oh-my-pi Natives Addon Loader Runtime 深度解析:ESM 入口与已校验 `.node` 原生模块之间的运行时

oh-my-pi Natives Addon Loader Runtime 深度解析:ESM 入口与已校验 .node 原生模块之间的运行时 【免费下载链接】oh-my-pi ⌥ Coding agent with the IDE wired in 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi 本篇技术指南围绕 oh-my-pi&…

2026/9/11 13:39:10 阅读更多 →
静态代码分析工具盘点与实战:从选型到CI落地指南

静态代码分析工具盘点与实战:从选型到CI落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 13:39:10 阅读更多 →
Maestro 移动端自动化测试完整指南:5 分钟从安装到跑通第一个端到端流程

Maestro 移动端自动化测试完整指南:5 分钟从安装到跑通第一个端到端流程

Maestro 移动端自动化测试完整指南:5 分钟从安装到跑通第一个端到端流程 【免费下载链接】Maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro 写移动端 UI 自动化测试往往要搭框架、写代码、反…

2026/9/11 13:39:10 阅读更多 →

最新新闻

自适应滤波与谱减法去噪:原理、实现与参数调试指南

自适应滤波与谱减法去噪:原理、实现与参数调试指南

简介:面向信号处理学习者、工程师及相关实验人员,这份压缩包聚焦语音信号中的噪声抑制,提供基于自适应滤波与谱减法的可运行实验环境,配套MATLAB算法脚本、测试音频与图形化交互界面。压缩包共10个文件,其中6个m脚本承…

2026/9/11 14:11:24 阅读更多 →
VS Code AI Chat 实战:从 Ollama 本地模型到 Claude Code 完整指南

VS Code AI Chat 实战:从 Ollama 本地模型到 Claude Code 完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 14:11:24 阅读更多 →
ArcGIS栅格插值方法解析与实战优化技巧

ArcGIS栅格插值方法解析与实战优化技巧

1. 项目概述栅格插值是地理信息系统(GIS)中最基础也最强大的空间分析工具之一。作为ArcToolbox中3D Analyst模块的核心功能,它能够将离散的点数据转化为连续的表面模型,广泛应用于地形建模、环境监测、气象预测等领域。在实际工作…

2026/9/11 14:11:24 阅读更多 →
四类主流监控与可观测架构的适用边界与落地差异

四类主流监控与可观测架构的适用边界与落地差异

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/11 14:11:24 阅读更多 →
SVM降水预测实战:从气象特征工程到轻量化部署

SVM降水预测实战:从气象特征工程到轻量化部署

简介:本资源是一套基于SVM支持向量机算法的降水量预测建模代码实现,面向气象数据分析初学者、机器学习实践者及高校相关课程设计学生,聚焦于将经典监督学习方法应用于实际气象回归任务。压缩包共54个文件,涵盖26个MATLAB源码&…

2026/9/11 14:11:24 阅读更多 →
Duix Avatar Ubuntu 22.04部署:三步搭好本地AI数字人,30分钟出片

Duix Avatar Ubuntu 22.04部署:三步搭好本地AI数字人,30分钟出片

Duix Avatar Ubuntu 22.04部署:三步搭好本地AI数字人,30分钟出片 【免费下载链接】Duix-Avatar 🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitc…

2026/9/11 14:10:24 阅读更多 →

日新闻

Axum 中 through `into_make_service_with_connect_info` 获取客户端连接信息:从 SocketAddr 到自定义 Connected 的完整指南

Axum 中 through `into_make_service_with_connect_info` 获取客户端连接信息:从 SocketAddr 到自定义 Connected 的完整指南

Axum 中 through into_make_service_with_connect_info 获取客户端连接信息:从 SocketAddr 到自定义 Connected 的完整指南 【免费下载链接】axum HTTP routing and request-handling library for Rust that focuses on ergonomics and modularity 项目地址: http…

2026/9/11 0:00:30 阅读更多 →
Metabase Embedding SDK 的 SdkDashboardId 类型:数值 ID、字符串 entity_id 与类型安全的仪表板标识

Metabase Embedding SDK 的 SdkDashboardId 类型:数值 ID、字符串 entity_id 与类型安全的仪表板标识

Metabase Embedding SDK 的 SdkDashboardId 类型:数值 ID、字符串 entity_id 与类型安全的仪表板标识 【免费下载链接】metabase The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart: …

2026/9/11 0:00:30 阅读更多 →
CANN/GE模型执行函数aclmdlExecuteV2

CANN/GE模型执行函数aclmdlExecuteV2

aclmdlExecuteV2 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlo…

2026/9/11 0:00:30 阅读更多 →

周新闻

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 17:44:57 阅读更多 →
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/11 11:36:03 阅读更多 →
基于CNN的调制信号识别:MATLAB实现时频图分类实战

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 8:03:07 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/9 7:36:02 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/10 8:24:05 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/9 7:36:01 阅读更多 →