11
文心一言API的json输出技巧
大模型开发/技术交流
- 文心大模型
- LLM
- API
2023.10.277109看过
文心一言大模型4.0的api发布后就立即调试了一下,使用方法和以前的版本基本没有太大变换,只是发现对用户意图的理解更加精准了,下面就举个实际开发中的例子说明。
众所周知,程序接口中的数据格式最好的就是json了,但是LLM输出的结果都是文本,如何将文本转化为各种程序能够识别的结构化数据呢?
需求:读取网页内容给出摘要、关键词、标题、发布日期等
常规做法:
-
使用BeautifulSoup解析网页
-
标识正文、标题、日期等标签,并使用soap的方法逐个查找和识别,将从html中提取的文本存储到相关字段
-
将正文发送到文心一言API提取摘要和关键词
-
将上面的字段组织为json返回
存在弊端:
-
每个网页结构差异很大,要针对每个网页分析dom结构,再编写相关程序才能够提取这些字段
-
文心一言返回的结果是纯文本转化为结构化数据不方便
优化思路:
-
有没有统一从html提取文本的方法
-
文心一言API能不能直接从文本阅读理解中识别出摘要、关键词、标题、发布日期等内容并直接格式化为json
动手:
-
BeautifulSoup的soap的get_text方法就可以把html里边的全部标签去除掉,只保留文本,这个就解决了第一个问题
-
文心一言的文本理解能力非常强大,直接把这些文本给到他,就可以提取这些内容,但是这里要有好的prompt给到文心一言,也就是本文的核心技巧所在
关键代码:
-
提取网页文本
# 提取其他未知网站内容def webpage_keywords_other(url):try:response = requests.get(url)response.raise_for_status()except requests.exceptions.RequestException as e:print(f'\n{e}')return {"message":f"访问{url}异常","errCode":-101}# 使用指定的编码方式解析网页内容soup = BeautifulSoup(response.content, "html.parser", from_encoding="utf-8")content=soup.get_text().replace('\n','').replace('\r','').replace('\t','')return {"content":content,"errCode":0}
-
调用文心一言API,给准确的prompt
# 提示词给 LLM 返回答案def chat(prompt):url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token()payload = json.dumps({"messages": [{"role": "user","content": prompt}],"system":"你是一名高级文秘,仔细阅读下面的文章后给出这篇文章的摘要(summary),前10个关键词(keywords),来源(source),标题(title),发布时间(public_time)等,结果必须用json代码的格式输出"})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)# 字符串转化为 jsonresponse = json.loads(response.text)return(json.loads(str_to_json(response.get('result'))))
备注:
-
需要一json输出的数据要明确告诉LLM,并且指明key的英文表达,否则输出的就是中文,不利于程序读取
-
文心一言输出的json是文本形式的,必须编程转化
-
对文心一言的输出进行格式转化
# 从字符串的第一个{开始到最后一个}结束,截取中间字符串def str_to_json(data:str):start_index = data.find("```json")end_index = data.rfind("```")result = data[start_index+8:end_index]return result
执行结果:

优点:
-
不用再像以前分析每个网站的网页结构
-
结构化输出方便不同接口传递数据
-
基本达到了人工阅读网站的能力
期待:
AI能够阅读更丰富的多媒体内容,能够利用爬虫技术对一个完整的网站进行整理,总结。
评论
