前言

自从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': '白蜡金'}
八字为:庚辰 丙戌 丁卯 辛亥

复现必要准备:

  1. 安装langchain
  2. 国内openai代理
  3. 网站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接口上的巧用的更多相关文章

  1. 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/

    在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...

  2. 使用HttpWebRequest请求API接口以及其他网站资源

    很多时候,我们项目需要其他网站的资源,而这个被请求的网站可能属于你们自己开发管理的网站.也可能是公网上其他网站对外开发的API接口,比如说腾讯的微信公众平台的API接口.各大短信服务商的短信API接口 ...

  3. 使用go, gin, gorm编写一个简单的curd的api接口

    go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口 hello world 常规版 新建 d ...

  4. php请求API接口方法

    thinkphp下直接放入公共函数即可. /** * 通过URL获取页面信息 * @param string $url 地址 * @return string 返回页面信息 */ function g ...

  5. php curl 请求api 接口

    官方文档curl : http://www.runoob.com/php/php-ref-curl.html php开启curl :  ① 打开 php.ini 文件  extension=php_c ...

  6. 使用js+Ajax请求API接口数据-带请求头方式

    C# http请求带请求头部分 先上代码: <script type="text/javascript"> function zLoginCheck() { var A ...

  7. Laravel POST请求API接口 使用validate表单验证返回欢迎页

    突然遇到的问题  就是使用Laravel进行开发API接口的时候  发现在表单验证不通过的时候返回了登录页 猜测问题应该是因为表单验证失败后进行了重定向导致的 因为返回状态码200 网上找了好久没找到 ...

  8. 首次分享,大厂资深测试做Api接口自动化测试的关键思路都在这里了

    引言 与UI相比,接口一旦研发完成,通常变更或重构的频率和幅度相对较小.因此做接口自动化的性价比更高,通常运用于迭代版本上线前的回归测试中. 手工做接口测试,测试数据和参数都可以由测试人员手动填写和更 ...

  9. [wxpusher]分享一个服务器推送消息到微信上的小工具,可以用于微信推送提醒和告警。

    背景 作为一个程序员,业余搞点自己的东西很正常,一般程序员都会有一两台自己的服务器,谁叫今天xx云搞活动,明天yy云搞活动呢. 自家的服务器用来跑爬虫,跑博客,或者跑一些个人业务,但当服务有新状态,抢 ...

  10. 05-06 Flutter JSON和序列化反序列化、创建模型类转换Json数据、轮播图数据渲染:Flutter创建商品数据模型 、请求Api接口渲染热门商品 推荐商品

    Config.dart class Config{ static String domain='http://jd.itying.com/'; } FocusModel.dart class Focu ...

随机推荐

  1. 强化学习、分布式计算方向的phd毕业后去企业的要求

    实验室慕师弟马上要phd毕业了,虽然我是遥遥无期,但是看到身边同学可以上岸还是提师弟高兴.由于师弟准备去企业工作,于是乎我也不免好奇起来phd毕业后去公司会有什么样的要求,于是网上找了找招聘信息,挑了 ...

  2. 学习使用docker-compose搭建Redis哨兵集群

    搭建的记录 Redis的容器部署后,redis-server的默认安装目录为 /usr/local/bin. docker volumes 映射的文件与本地的文件共享,修改本地文件后,需要重启dock ...

  3. Apache DolphinScheduler社区又一PMC获推选通过!

    PROFILE 姓名:程鑫 公司:阿里云 职位:开发工程师 Github ID: rickchengx 从事领域:大数据调度系统开发 兴趣爱好:健身 推举理由 他于2022年8月2日开始了他的Dolp ...

  4. CF1051F题解

    The Shortest Statement 算法:树链剖分,最小生成树,最短路. 先讲一下题意:有一个 \(n\) 点 \(m\) 边的无向连通图,\(q\) 次询问,每次询问 \(a\) 到 \( ...

  5. python开发环境安装-包含Anaconda的安装配置和pycharm的安装

    一. 需要得安装包 1.  Anaconda3-5.3.0-Windows-x86_64.exe  python环境 2.pycharm-professional-2021.2.2.exe      ...

  6. esphome esp8266刷写遇到的问题

    问题描述: 在尝试打开串口时出现以下错误信息: Failed to execute 'open' on 'SerialPort': Failed to open serial port. 起因: 莫名 ...

  7. 技术如何通过API接口获取自己想要同款商品的数据

    确定数据源: 首先,你需要确定哪些平台或服务提供商提供了你感兴趣的商品数据.例如,电商平台.品牌商.市场调研公司等. 了解API文档: 访问提供商的开发者门户网站,阅读API文档.文档会详细介绍如何使 ...

  8. SQLserver 数据库自定义函数

    起源 最近项目开发上使用的SQLserver数据库是2008版本,由于08版本的数据是没有字符串合并(STRING_AGG)这个函数(2017版本及以上支持)的,只有用stuff +for xml p ...

  9. 【Python自动化】之利用JS操作页面滚动条(新)

    如何操作页面中的滚动条,有以下几个方法: 一.查找可见元素进行滚动页面(通用) 方法一: ①移动到元素element对象的"顶端",与当前窗口的"顶部"对齐(默 ...

  10. 使用gin实现简单的注册和登录功能

    一.前言 使用了gorm操作数据库,后端基于gin框架,只是一个简单的注册和登录与数据库交互的后端实现例子. 二.目录结构 -templates --regist.html --login.html ...