分享一个大模型在请求api接口上的巧用

前言
自从Chatgpt横空出世以来,各种智能工具层出不穷,聊天、绘画、视频等各种工具帮助很多人高效的工作。作为一个开发者,目前常用应用包括代码自动填充,聊天助手等。
这些是工具层面的使用,有没有将大模型和日常编码的前后端流程相结合使用的切入点呢?今天分享一个使用大模型自动调用api接口的示例,可以作为大模型在开发中的另一种使用场景。
接口说明
示例接口如下,一个八字测算的接口(仅做示例,非封建迷信)

请求接口:[https://api.yuanfenju.com/index.php/v1/Bazi/paipan](https://api.yuanfenju.com/index.php/v1/Bazi/paipan)
请求方法:POST
请求body:
{
"api_key": "xxxx",
"name": "张三",
"sex": 0,
"type": 1,
"year": 2000,
"month": 10,
"day": 10,
"hours": 22,
"minute": 0
}
api_key 需要在网站申请
请求示例:

大模型提取信息发送请求
接口的信息如上,正常开发过程是构造好url, body,然后发送请求。使用大模型首先将文字的信息提取变成请求的body体,使用的langchain框架来完成。
原理非常简单,就是创建合适的提示词,让大模型提取传入内容中的关键字段,并以json格式返回。
示例如下
import os
import requests
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "sk-eCWGtrwU14E60A45E8a2T3BlbKFJ18b59d41Fdb748828B0f"
os.environ["OPENAI_API_BASE"] = "https://aigptx.top/v1"
def fun(query):
url = f"https://api.yuanfenju.com/index.php/v1/Bazi/cesuan"
# 创建大模型提示词,提取文字的内容
prompt = ChatPromptTemplate.from_template(
"""你是一个参数查询助手,根据用户输入内容找出相关的参数并按json格式返回。
JSON字段如下:
- "api_key": "K0I5WCmce7jlMZzTw7vi1xsn0",
- "name": "姓名",
- "sex": "性别,0表示男,1表示女,根据姓名判断",
- "type": "日历类型,0农历,1公里,默认1",
- "year": "出生年份 例:1998",
- "month": "出生月份 例 8",
- "day": "出生日期,例:8",
- "hours": "出生小时 例 14",
- "minute": "0",
如果没有找到相关参数,则需要提醒用户告诉你这些内容,只返回数据结构,不要有其他的评论,
用户输入:{query}""")
chain = prompt | ChatOpenAI(temperature=0) | JsonOutputParser()
data = chain.invoke({"query": query})
print(f"接口body格式化结果: {data}")
result = requests.post(url, data)
if result.status_code == 200:
print(f"接口关键信息:{result.json()['data']['bazi_info']}")
try:
content = result.json()
res = f"八字为:{content['data']['bazi_info']['bazi']}"
print(res)
except Exception as e:
print(f"八字查询失败,返回数据异常: {e}")
else:
print("接口请求状态异常")
if __name__ == "__main__":
query = "2000年10月10日22时"
fun(query)
结果:
接口body格式化结果: {'year': '2000', 'month': '10', 'day': '10', 'hours': '22', 'api_key': 'K0I5WCmce7jlMZzTw7vi1xsn0', 'name': '姓名', 'sex': '性别,0表示男,1表示女,根据姓名判断', 'type': '日历类型,0农历,1公历,默认1', 'minute': '0'}
接口关键信息:{'kw': '戌亥', 'tg_cg_god': ['正财', '劫财', '日元', '偏财'], 'bazi': '庚辰 丙戌 丁卯 辛亥', 'na_yin': '白蜡金'}
八字为:庚辰 丙戌 丁卯 辛亥
复现必要准备:
- 安装langchain
- 国内openai代理
- 网站api_key
分析
首先构造提示词,这是整个流程的灵魂。通常提示词常见使用CRISPE框架,它可以为模型提供详细的背景,任务目标和输出格式要求。
| CR:capacity and role 能力与角色 | 希望模型扮演怎样的角色以及角色具有的能力 | 你是一个参数查询助手 |
|---|---|---|
| I:insight 洞察力 | 完成任务依赖的背景信息 | |
| S:statement 指令 | 希望模型做什么,任务的核心关键词和目标 | 根据用户输入内容找出相关的参数 |
| P:personality 个性 | 希望模型以什么样的风格或方式输出 | 并按json格式返回 |
| E:experiment 尝试 | 要求模型提供多个答案,任务输出结果数量 |
本示例中提示词:
# 创建大模型提示词,提取文字的内容
prompt = ChatPromptTemplate.from_template(
"""你是一个参数查询助手,根据用户输入内容找出相关的参数并按json格式返回。
JSON字段如下:
- "api_key": "K0I5WCmce7jlMZzTw7vi1xsn0",
- "name": "姓名",
- "sex": "性别,0表示男,1表示女,根据姓名判断",
- "type": "日历类型,0农历,1公里,默认1",
- "year": "出生年份 例:1998",
- "month": "出生月份 例 8",
- "day": "出生日期,例:8",
- "hours": "出生小时 例 14",
- "minute": "0",
如果没有找到相关参数,则需要提醒用户告诉你这些内容,只返回数据结构,不要有其他的评论,
用户输入:{query}""")
调用过程:
chain = prompt | ChatOpenAI(temperature=0) | JsonOutputParser()
data = chain.invoke({"query": query})
print(f"接口body格式化结果: {data}")
通过合适的提示词,将传入的信息 2000年10月10日22时提取出来,组装成一个结果。其中ChatOpenAI(temperature=0)是让大模型不要发散思维,严格按照提示词来生成内容,避免结果不准确。JsonOutputParser()返回的结果json格式化。
{'year': '2000', 'month': '10', 'day': '10', 'hours': '22', 'api_key': 'K0I5WCmce7jlMZzTw7vi1xsn0', 'name': '姓名', 'sex': '性别,0表示男,1表示女,根据姓名判断', 'type': '日历类型,0农历,1公历,默认1', 'minute': '0'}
然后使用requests发送post请求,解析返回结果。
小结
这是一个很简单的大模型应用,主要看点在于使用大模型组织接口调用的参数,包括字段和格式,替换手动编码的实现方式。个人认为在复杂或者变化频繁的场景下能稍微提升效率。
分享一个大模型在请求api接口上的巧用的更多相关文章
- 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/
在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...
- 使用HttpWebRequest请求API接口以及其他网站资源
很多时候,我们项目需要其他网站的资源,而这个被请求的网站可能属于你们自己开发管理的网站.也可能是公网上其他网站对外开发的API接口,比如说腾讯的微信公众平台的API接口.各大短信服务商的短信API接口 ...
- 使用go, gin, gorm编写一个简单的curd的api接口
go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口 hello world 常规版 新建 d ...
- php请求API接口方法
thinkphp下直接放入公共函数即可. /** * 通过URL获取页面信息 * @param string $url 地址 * @return string 返回页面信息 */ function g ...
- php curl 请求api 接口
官方文档curl : http://www.runoob.com/php/php-ref-curl.html php开启curl : ① 打开 php.ini 文件 extension=php_c ...
- 使用js+Ajax请求API接口数据-带请求头方式
C# http请求带请求头部分 先上代码: <script type="text/javascript"> function zLoginCheck() { var A ...
- Laravel POST请求API接口 使用validate表单验证返回欢迎页
突然遇到的问题 就是使用Laravel进行开发API接口的时候 发现在表单验证不通过的时候返回了登录页 猜测问题应该是因为表单验证失败后进行了重定向导致的 因为返回状态码200 网上找了好久没找到 ...
- 首次分享,大厂资深测试做Api接口自动化测试的关键思路都在这里了
引言 与UI相比,接口一旦研发完成,通常变更或重构的频率和幅度相对较小.因此做接口自动化的性价比更高,通常运用于迭代版本上线前的回归测试中. 手工做接口测试,测试数据和参数都可以由测试人员手动填写和更 ...
- [wxpusher]分享一个服务器推送消息到微信上的小工具,可以用于微信推送提醒和告警。
背景 作为一个程序员,业余搞点自己的东西很正常,一般程序员都会有一两台自己的服务器,谁叫今天xx云搞活动,明天yy云搞活动呢. 自家的服务器用来跑爬虫,跑博客,或者跑一些个人业务,但当服务有新状态,抢 ...
- 05-06 Flutter JSON和序列化反序列化、创建模型类转换Json数据、轮播图数据渲染:Flutter创建商品数据模型 、请求Api接口渲染热门商品 推荐商品
Config.dart class Config{ static String domain='http://jd.itying.com/'; } FocusModel.dart class Focu ...
随机推荐
- 公开号CN117354339A —— 数据传输专利 —— 解决了相关技术在进行数据传输的过程中时效性较差的技术问题
看到一个新闻: 地址: https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_92907119 ...
- 使用UltraISO克隆clone树莓派SD卡(注意不是复制、备份,是克隆)
搞了好长时间做了一个树莓派的SD卡,包括了一些自己安装的配置,为了防止哪天把这个SD卡搞坏掉(比如写数据时候断电,比如apt upgrade时掉电),于是考虑把这个SD卡进行克隆clone. 因为手上 ...
- centos 查看jdk 安装路径
命令行: which java 输出: /usr/bin/java 再次输入: ls -lr /usr/bin/java 输出: lrwxrwxrwx 1 root root 22 4月 26 17: ...
- ×被替换成x 的解决办法
今天写代码遇到一个很有趣的问题: 在php中使用echo 输出url的时候当url中包含×字段时就会被html直接解析成 x (乘号)这样一来我返回的地址就不能正常访问url了: 解 ...
- WPF 怎么把checkbox改成开关样式
先看一下效果吧: isChecked = false 的时候的效果 isChecked = true 的时候的效果 然后我们来实现一下这个效果吧 第一步:创建一个空的wpf项目: 第二步:在项目里面添 ...
- 22张图详解浏览器请求数据包如何到达web服务器(搞懂网络可以毕业了)
浏览器的请求数据包如何到达web服务器? 很多读者对于其中的完整流程不是特别的了解,下面一口君通过这22张图,详细的讲解我们点击浏览器的网址之后,数据包是如何经过重重险阻到达web server的. ...
- Viper:强大的Go配置解析库
1 介绍 Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式.目前Star 26.6k, 它支持以下特性: 设置默认值 从JSON.T ...
- 守护您的数字资产:API安全的最佳实践
在数字化时代,API(应用程序编程接口)已成为企业与用户.服务与服务之间沟通的桥梁.然而,随着API的广泛应用,安全问题也日益凸显.本文将探讨API安全的重要性,并提供一些实用的安全措施,帮助您保 ...
- 实用接地气的 .NET 微服务框架
前言 微服务架构已经成为搭建高效.可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利.为了解决这一问题,于是作者精心打造了一款最接地 ...
- SSH 登陆 Windows 时踩过的坑
有一次处于某些原因我在 Mac 上使用 SSH 远程登陆了 Windows,然后在 Windows 上使用 SSH 登陆 localhost,惊讶地发现登不进去!SSH 提示公钥验证失败.可是我的 W ...