凡科快速建站,wordpress 图片加水印,做的网站怎么上传图片,群晖修改wordpress端口大模型LLM 应用AI Agents框架#xff0c;为我们提供了非常便利的自动化执行任务的能力。微信公众号(订阅号) 是非常适合落地各种AI Agents的场景#xff0c;我们可以利用微信公众号提供的文本、图像、语音的输入#xff0c;在自己服务器上部署一套API框架#xff0c;把自己…大模型LLM 应用AI Agents框架为我们提供了非常便利的自动化执行任务的能力。微信公众号(订阅号) 是非常适合落地各种AI Agents的场景我们可以利用微信公众号提供的文本、图像、语音的输入在自己服务器上部署一套API框架把自己感兴趣的一些对话、图文、语音等能力的API封装为Agents。这里给大家介绍一个拆箱即用的微信公众号服务端框架 Flasktencent代码库来实现并且会利用一个简单的金融智能助理(Finance Agent)的例子来实现一个根据用户输入来查询实时股价并且返回给微信公众号用户的功能支持更加复杂定制的AI Agents业务逻辑。 一键部署图文回复的Demo 跳转
AI Agents API调用实现查询股价功能的Demo 跳转
2. 环境准备
开发一个微信公众号(订阅号)的自动回复和AI Agents需要下列准备包括
2.1 服务器可以提供80端口和公共IP的服务器这样微信公众号后台就可以发送请求到 http://{ip_address}:80/wx 端口然后你的服务端返回内容给公众号给用户提供服务。2.2 python库 flask (提供web服务)2.3 python库 tencent (提供了三方的API包括封装好的微信服务端验证文本请求图像请求等等)。
安装环境可以执行下列命令
代码语言txt
复制
pip install flask tencent3. 拆箱即用部署
3.0 服务器上部署Flasktencent服务端
微信开发平台上例子第一次部署可能要花比较长时间中间缺少debug信息需要尝试很多次。
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Getting_Started_Guide.html
这里提供了封装好亲自测试一分钟可以成功跑通的基础类和Flask Server的执行脚本复杂应用也可以在这个基础类上进行修改。从github上下载例子拆箱即用 main.py文件地址
地址https://github.com/AI-Hub-Admin/tencent/blob/main/examples/wechat/main.py
代码语言txt
复制
wget https://github.com/AI-Hub-Admin/tencent/blob/main/examples/wechat/main.py
python main.py部署好服务之后可以通过浏览器访问 http://127.0.0.1:80/wx_home 查看是否部署成功。如果可以看到Hello World的一个html页面就代表服务部署成功了。给微信提供验证的服务入口在 (http://127.0.0.1:80/wx)。 下一步就要在微信官方平台验证你的服务器可以给公众号提供服务了。
需要保存好
\1. 你对外提供的URL http://{your_ip_address}/wx (80端口从URL里省去)
\2. 一个验证用的token例子代码中 token“dummy”需要填写在下一端的对应位置你可以修改wechat_constants.py 文件中对应变量
3.1 注册微信公众号
详细的注册和开发流程参考微信公众号开发文档(https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Getting_Started_Guide.html)但是因为自己第一次部署很容易配置失败这里给大家分享一些拆箱即用的可以直接上手跑的例子。
a.登录微信平台注册账号
官方网址 (https://mp.weixin.qq.com/) 个人开发者可以先选择订阅号服务号和企业号都需要公司营业执照等材料。 b. 配置服务器设置 在导航栏选择 “设置与开发-基本配置”在服务器 配置项选择修改配置。这里的对话框可以选择填写你的服务端信息。
URL填写你对外暴露服务的地址 **http://{your_ip_address}/wx**token这里先填写 dummy (对应我们的 python例子可以后续再修改)
最后保存。当你点击保存按钮的时候微信服务端会给你的地址发一个 GET请求来验证你拥有服务器这里如果验证失败了可以看看python 后台的日志如下图中 (hashcode和signature是否一致.这里验证逻辑被封装到 tencent库的 WechatServerVeriAPI.static_api函数内感兴趣可以查看 tencent.contrib.wechat.wechat_api 这个模块。保存后点击启用就可以从公众号上发消息验证了。
c. 关注公众号并发送文本图片消息
如果部署成功了你发送文本消息公众号回复 “hello”如果你发送图片公众号会把相同图片的mediaid 返回给你达到回复用户相同图片效果。参考例子main.py文件中对基础文本回复 和 对图像回复封装在了 WechatTextReplyBaseAPI.static_api 和 WechatImageReplyBaseAPI.static_api 这两个函数里。初次上手微信后台开发的开发者可以不用纠结于request的XML请求的格式细节只用关注最核心的业务逻辑获取用户输入得到输出并返回给用户就好了。 3.2 常见错误
a. 系统发生错误请稍后重试
因为填写配置错误导致 hash_code和signature计算不同注意点
\1. URL不能带端口一定是固定 服务器, 不能是 http://{your_ip_address}:80/wx 或者是 https://{your_ip_address}:443/wx这样填写是不行的。
\2. token: 只能英文数字不能有下划线或者别的符号这个很容易被忽略。必须为英文或数字长度为3-32字符。 具体错误原因微信后台没有提供我们可以从我们 python服务端日志来看出端倪。查看下列flask打印的日志看看 hashcode 和 signature是否一致不一致就是哪里填错了。 4. 实现自己的金融助理(查询股价)
4.1 直接基于API来实现自动回复
可以参考代码库(https://github.com/AI-Hub-Admin/tencent)中 examples/tests/ 目录下的 main_finance_agent.py 例子。 微信公众号开发很多对 服务端request的输入输出格式都很复杂为了简单上手可以直接继承 WechatTextReplyBaseAPI 基础类然后主要关心获取用户输入和返回给用户的核心业务逻辑就可以了。
这里金融智能助理为例我们希望做一个可以查询股票价格的 AI Agents我们只用自己实现核心业务逻辑就好。完整代码参考例子:
地址https://github.com/AI-Hub-Admin/tencent/blob/main/examples/wechat/main_finance_agent.py
开发 WechatTextReplyFinanceAPI 类
这个 WechatTextReplyFinanceAPI 类继承 WechatTextReplyBaseAPI 基类我们只用关系和修改入口静态方法 static_api(args, kwargs) 和 process(self, msg) 函数实现业务逻辑就好了。
这个类代码如下实现了查询股票代码和组装自动回复的功能我们使用了 FinanceAgent 库(包含了港股A股美国等api请求股价的函数也支持Agents式的 tools自动化调用)
代码语言txt
复制
class WechatTextReplyFinanceAPI(WechatTextReplyBaseAPI):staticmethoddef static_api(args, kwargs):return WechatTextReplyFinanceAPI(None).api(args, kwargs)def process(self, msg):input: msg is a class of Wechat sent Msg, TextMsg, ImageMsg defined in receive.py file, you can also access other input information toUser msg.FromUserNamefromUser msg.ToUserNameoutput: str, the outer api method will process and wrap the Message Objectinput_text msg.Content# parse user intent and query stock code from input text, This example, we will use 700 for tencent as example## implement_your_code_herestock_info_list fa.api(symbol_list[700], marketHK)response_list []for stock_info in stock_info_list:response %s股价: %s, 最高价: %s, 最低价: %s, 数据更新时间: %s, 数据源: %s % (stock_info[symbol], stock_info[avg_price], stock_info[high], stock_info[low], stock_info[update_time], stock_info[source])response_list.append(response)output_text ;.join(response_list) return output_text需要重写的函数
static_api是为了其他module 使用时候不用实例化直接通过类Classname.static_api 来调用函数注意这里要修改对应的类名字 (WechatTextReplyFinanceAPI)process() 是包含具体的处理用户请求的逻辑输入是一个 Msg对象(从微信请求的xml请求体转化来的)我们通过 msg.Content 获取用户输入的文本。返回的是你希望回传给用户的 字符串(str)比如腾讯(股票代码: 700)的股价总结。
在Flask对应的 /wx方法的Flask 函数主入口把原先的 WechatTextReplyBaseAPI.static_api(args[recMsg], kwargs{}) 替换为你实现的金融服务的函数就好了。WechatTextReplyFinanceAPI.static_api(args[recMsg], kwargs{})。点击运行再给你的公众号发送消息。如果成功你就可以看到查询的腾讯的最新股价了。
4.2 AI Agents智能体构建方法(把API封装为Tool供大模型调用)
AI智能体借助大模型LLM能力执行流程简单描述就是LLM 输入用户的prompt和可以执行的函数 tools (tools的概念就是把函数统一schema化让模型可以理解)返回 可以执行的函数和填充好的parameters参数。我们再根据LLM返回决策结果来直接执行这段函数代码。
4.2.1 构造智能体调用tools或者function_calls
首先AI智能体借助大模型和prompt来给函数填充参数输入给LLM的信息包括
\1. 函数的schema(包括函数名,函数参数列表,每个参数取值类型,哪些是required参数等等)
\2. 用户自然语言输入的prompt。
大模型还是十分智能的会把prompt中的相关文本抽取结合自己知识来对参数改写 (比如 hongkong 改为HK再填充到函数里对应的数据填充到函数的schema中。OpenAI的API 返回信息包含了function 和 对应参数 params。以openai的函数填充为例。
输入 prompt
代码语言txt
复制
## You can fill the function with json format, the schema for the function is {type: function, function: {name: tencent_api_base, description: , parameters: {type: object, properties: {arg1: {type: string}, arg2: {type: string}, arg3: {type: string}, arg4: {type: string}, arg5: {type: string}}, required: [arg1, arg2, arg3]}}}, the user inputs include arg110, arg220, arg330, please output the executable function values in json format, with key as function输出prompt
代码语言txt
复制
{function: {name: tencent_api_base,parameters: {arg1: 10,arg2: 20,arg3: 30,arg4: ,arg5: }}
}4.2.2 把股价查询API构建为Agent 基于tencent库中提供的函数
API调用毕竟相当于人工写死的逻辑只能接受固定输入好的参数格式。
借助大模型我们将API直接调用转化为基于大模型的AI Agent范式。
完整的金融智能助理 AI Agents执行例子可以参考这个Tutorial 的例子。
地址https://github.com/AI-Hub-Admin/tencent/blob/main/examples/agents/run_finance_agent_api_tools.py
a. Tool的定义函数function和参数类型
定义AI Agents执行流程首先需要告诉大模型任务有哪些 Tools(函数or工具) 可以选择以及用户的输入是什么。以我们构造金融助理Agent为例子需要大模型解析的一个函数function finance_stock_price_api明确入参类型 symbol_list 是 list类型market 市场是string 类型。
代码语言txt
复制
def finance_stock_price_api(symbol_list: list, market: str):symbol_list is list of jsonmarket is strimport FinanceAgent as fastock_info_json fa.api(symbol_listsymbol_list, marketmarket)return stock_info_jsonb. 函数function转换为LLM理解的Schema格式
利用tencent.utils.agent_utils 中的 function_to_schema 将函数转化为统一的OpenAI训练的 schema这里不同大模型数据格式不同具体schema需要和大模型训练时保持一致才能达到最佳效果。
代码语言txt
复制
from tencent.utils.agent_utils import function_to_schematools [finance_stock_price_api]
tool_schemas [function_to_schema(tool) for tool in tools]schema是一个json格式如下
代码语言txt
复制
{type: function,function: {name: finance_stock_price_api,description: symbol_list is list of json\n market is str,parameters: {type: object,properties: {symbol_list: {type: array},market: {type: string}},required: [symbol_list,market]}}
}c. 输入给LLM进行Tools的决策
将可以执行的函数 Schema 和用户输入prompt 传给大模型让大模型产出需要执行函数本质上是大模型预测了一下函数执行的最大概率并且输出最大概率的文本相当于给函数填充了参数的槽位得到了一个可以执行的 字符串“
代码语言txt
复制 client OpenAI() response client.chat.completions.create(modelgpt-4o-mini,messages[{role: user, content: instruction}],toolstool_schemas,)假设用户输入prompt是希望查询腾讯(700) 和 快手(1024) 的港股股价
合并得到给LLM的输入为
代码语言txt
复制
You can fill the function with json format, the schema for the function is {type: function, function: {name: finance_stock_price_api, description: symbol_list is list of json\n market is str, parameters: {type: object, properties: {symbol_list: {type: array}, market: {type: string}}, required: [symbol_list, market]}}}, the inputs includes I am interested in Tencent(code:700) and Kuaishou (code:1024) stock price,please output the executable function values in json format, with key as function如果本地执行没有OpenAI的Key可以尝试web端看看大模型产出结果如下有的时候产出的Json也是有可能是错误的大模型产出不准确有错误和幻觉这个时候就需要业务后处理了。
代码语言txt
复制
{function: {name: finance_stock_price_api,description: symbol_list is list of json\n market is str,parameters: {symbol_list: [700,1024],market: Hong Kong}}
}如何没有大模型调用环境可以把这个字符串输入然后让Agent 程序继续跑下去。
代码语言txt
复制
[{function:{name:finance_stock_price_api,parameters:{symbol_list:[700,1024],market:HK}}}]最后就是执行 execute_tool_call_from_json 来具体执行返回的函数和参数值然后保存结果到 messages 里面我们就根据用户自然语言处理的输入决策调用股价查询API 并且获得了结果。
代码语言txt
复制
def execute_tool_call_from_json(tool_call, tools_map):tool_call: json format of {functions: {name: tencent_api_base,parameters: {arg1: 10,arg2: 20,arg3: 30,arg4: ,arg5: }}}name tool_call[function][name]parameters tool_call[function][parameters]# args json.loads(tool_call.function.arguments)print(fAssistant: {name}({parameters}))# call corresponding function with provided argumentsreturn tools_map[name](**parameters)d. 小结
这样我们就把API调用重构为了一个 AI Agents调用的范式可以看出几点区别
\1. API调用的确定性强缺点就是参数处理和解析定制化都需要根据query的NLP技术理解来处理。
2.AI Agents 调用支持用户输入灵活性更强但是输出准确性不够高。
从AI Agents 根据用户输入和备选Tools的Schema决策可以执行函数的字符串返回流程中执行哪个参数和执行哪个函数都是LLM根据概率模型来预测的一段可以执行代码。不用NLP解析槽位再填写到API里。但是缺点就是LLM产出的字符串可能有各种bug需要后处理比如json格式不对参数填写错误等。
在这个Tutorial 我们把API封装为 tools 让LLM调用过程中tencent包提供了API函数方便封装以及 function_to_schema 和 execute_tool_call 的一些utils的函数方便调用。具体业务下Agents执行还要结合各自业务来智能地来对用户提供相应服务。
那么如何系统的去学习大模型LLM
我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。
作为一名热心肠的互联网老兵我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ 朋友们如果有需要全套 《LLM大模型入门进阶学习资源包》扫码获取~
篇幅有限部分资料如下
LLM大模型学习指南路线汇总
大模型入门要点扫盲必看 既然要系统的学习大模型那么学习路线是必不可少的这份路线能帮助你快速梳理知识形成自己的体系。
大模型入门实战训练
光学理论是没用的要学会跟着一起做要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。
国内企业大模型落地应用案例
《中国大模型落地应用案例集》 收录了52个优秀的大模型落地应用案例这些案例覆盖了金融、医疗、教育、交通、制造等众多领域无论是对于大模型技术的研究者还是对于希望了解大模型技术在实际业务中如何应用的业内人士都具有很高的参考价值。 文末领取 《2024大模型行业应用十大典范案例集》 汇集了文化、医药、IT、钢铁、航空、企业服务等行业在大模型应用领域的典范案例。 LLM大模型学习视频
观看零基础学习书籍和视频看书籍和视频学习是最快捷也是最有效果的方式跟着视频中老师的思路从基础到深入还是很容易入门的。 文末领取
640份大模型行业报告
包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。
获取方式
这份完整版的大模型 LLM 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
有需要的小伙伴可以Vx扫描下方二维码免费领取