手把手教你使用C#创建一个WebSearchAgent
PocketFlowSharp介绍
最近我对PocketFlow比较感兴趣,不仅是因为它是一个极简的LLM框架,更加让我觉得很不错的地方在于作者提供了很多方便学习的例子,就算没有LLM应用开发经验,也可以快速上手。
我比较喜欢C#,也想为C#生态做一点小小的贡献,因此创建了PocketFlowSharp项目。
PocketFlowSharp项目的愿景是助力.NET开发者开发LLM应用。
在我个人在学习实践的过程中,我发现很多项目不是那么“新手友好的”,这也没有办法,开发者更关注的是代码实现,文档写起来确实也很费劲。
在PocketFlowSharp项目中,我希望可以做到足够的新手友好,提供一些只要简单配置即可跑起来的示例,并且每个示例是独立的。
PocketFlowSharp项目地址:https://github.com/Ming-jiayou/PocketFlowSharp
构建Web_Search_Agent
今天介绍的是Web_Search_Agent。
效果
先来看下效果:
配置
运行这个示例非常简单,我提供了.env.example,如下所示:
用于配置LLM与BraveSearchApi,目前BraveSearchApi的免费额度是一个月2000次。
将其重命名为.env,注意需要将其设置为嵌入的资源,如下所示:
实现
在经过简单的配置之后,应该已经能够跑通了,为了让感兴趣的人更好的学习,我这里来介绍一下具体的实现。
Web_Search_Agent说是Agent其实我觉得更像是个工作流。PocketFlowSharp相当于一个简单的流程框架,将节点根据一个string类型的action进行连接。
Web_Search_Agent的整体流程如下所示:
首先创建一个Flow:
将节点进行连接有两种方式。
一种是:
decide.Next(search, "search");
另一种是:
_ = search - "decide" - decide;
这是因为实现了运算符重载,具体可看此处:
运行Flow的时候,节点之间的编排在这里:
每一个节点的运行流程在这里:
首先会运行决定节点的prep:
获取上下文(当前还没有上下文)与问题。
决定节点的exec:
获取prep的问题与上下文,判断是搜索还是回答。
决定节点的post:
根据LLM做出的决定选择行动。
这里LLM选择的是search。
根据返回的search寻找下一个节点也就是搜索节点,然后同样执行prep、exec与post。
Search节点的prep:
从共享存储中获取要搜索的内容。
Search节点的exec:
返回网络搜索结果:
Search节点的post:
将网络搜索的结果放到共享存储的context中。
然后返回"decide"又会回到决定节点。
决定节点这次选择的是answer:
就会转到回答节点。
回答节点的prep:
从共享存储中获取问题与上下文。
回答节点的exec:
根据问题与上下文进行回答。
回答节点的post:
将答案存入共享存储中。
最后从共享存储中提取出答案:
以上就是整个流程,希望能够让感兴趣的朋友快速理解。
最后
如果你还有什么不理解的地方,欢迎给我提issue。
如果对你有所帮助,点颗star就是最大的鼓励。
欢迎感兴趣的朋友一起为爱发电。
手把手教你使用C#创建一个WebSearchAgent的更多相关文章
- 手把手教你用vue-cli构建一个简单的路由应用
上一章说道:十分钟上手-搭建vue开发环境(新手教程)https://www.jianshu.com/p/0c6678671635 开发环境搭建好之后,那么开始新添加一些页面,构建最基本的vue项目, ...
- 手把手教你从零写一个简单的 VUE--模板篇
教程目录1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 Hello,我又回来了,上一次的文章教会了大家如何书写一个简单 VUE,里面实现了VUE 的数据驱动视图 ...
- 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引
近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开 ...
- 手把手教你用redis实现一个简单的mq消息队列(java)
众所周知,消息队列是应用系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有 ActiveMQ,RabbitMQ,Zero ...
- 手把手教你使用 js 实现一个 Canvas 编辑器
手把手教你使用 js 实现一个 Canvas 编辑器 拖拽 缩放,等比缩放 导出 image 模版 撤销,重做 OOP,封装,继承,多态 发布库 CI/CD (gitlab/github) ... h ...
- 手把手教你从零写一个简单的 VUE
本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...
- 手把手教你解决无法创建 JPA 工程的问题
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703803.html ------------------------------------ ...
- 手把手教你用Docker部署一个MongoDB集群
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...
- 手把手教你使用Java实现一个神经网络
首先看一下运行效果: 下面是项目整体目录: 0.实现神经网络总览 神经网络由层.神经元.权重.激活函数和偏置组成.每层都有一个或者多个神经元,每一个神经元都和神经输入/输出连接,这些连接就是权重. 需 ...
- 手把手教你用netty撸一个ZkClient
原文地址: https://juejin.im/post/5dd296c0e51d4508182449a6 前言 有这个想法的缘由是前一阵子突发奇想, 想尝试能不能直接利用js连接到zookeeper ...
随机推荐
- [NOIP2018] 旅行 题解
明显要以 \(1\) 为起点. 原图是树 这种情况下,走路不能回头,只能用 \(dfs\) 的思路走.当然肯定每次都走较小的那棵子树,\(vector\) 存图后排序即可达到这种效果. 时间复杂度 \ ...
- 新版Edge 浏览器几种详细的卸载方法
一.使用Windows系统自带卸载程序卸载 1.打开"控制面板"(可在Windows搜索栏中搜索): 2.选择"程序和功能": 3.找到Microsoft Ed ...
- .NET 10 首个预览版发布,跨平台开发与性能全面提升
前言 2024年2月25日,微软正式推出 .NET 10 预览版 1,标志着这一跨平台开发框架迈入新里程碑. 本次更新聚焦 JIT 编译器优化.运行时性能提升和跨平台开发体验增强,同时引入多项开发者期 ...
- Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
在众多开源项目中,高颜值.功能强大且部署简单的项目往往更能俘获开发者的心.然而,实际部署 Web 应用时,面对数据库.缓存.消息队列等复杂的依赖关系,常常令人头疼.Docker 的开源为我们普及了容器 ...
- 寒武纪平台上传 Docker 镜像
前言 学校的算力平台更换为了寒武纪平台,相较于以前简单的通过 Linux 用户隔离,使用门槛有所提升.但从整体来看,这样拥有更好的隔离性,在 docker 中即便搞崩了也可以重新来过,可以避免因他人的 ...
- mongodb 查看、创建、修改、删除索引
简介 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询 ...
- crontab Do you want to retry the same edit? (y/n)
crontab: installing new crontab "/tmp/crontab.tEoCzO":2: bad day-of-month errors in cronta ...
- laradock 更改 mysql 版本
# 修改 .env 文件 MYSQL_VERSION=5.7 # 默认为 latest #停止mysql容器 docker-compose stop mysql # 删除旧数据库数据 rm -rf ~ ...
- Git安装与Git GUI的使用
一.下载安装包 官网:https://git-scm.com/downloads(下载慢) 或 https://pc.qq.com/search.html#!keyword=git,本人使用的是Git ...
- element-ui和ant-design-vue 数字输入框只能输入大于等于1的整数
限制输入的是大于等于1的整数 <template> <div> <h1>ant-design-vue 1.xx</h1> <a-input-num ...