⚡LLM2Json⚡是一个易于使用的格式化大语言模型输出工具包,它的主要设计思想和部分实现代码参考 LangChain(但输出效果初步测试优于Langchain)。它可以通过自动构建prompts引导大语言模型输出符合JSON语法的返回数据,解决了大语言模型格式化输出、数据交互、前端开发等遇到的数据格式相关问题,使下游的应用程序、GPTs、Agents等开发更加方便快捷。
在线Notebook运行:https://aistudio.baidu.com/projectdetail/7412328?contributionType=1
pip install llm2json
from llm2json.prompts.schema import BaseModel, Field
class Xiaohongshu(BaseModel):
title: str = Field(description="文章标题")
context: str = Field(description = "正文内容")
keywords: list = Field(description = "关键词")
(可选项,但建议配置)
correct_example = '{"title":"文章标题", "context":"正文内容", "keywords":["关键词1","关键词2"]}'
from llm2json.prompts import Templates
t = Templates(prompt="""
请你为商品:<{topic}>写一篇小红书文案。
包括文章标题、正文内容和关键词,同时正文需要包含emoji表情
""",
field=Xiaohongshu,
correct_example=correct_example)
template = t.invoke(topic="文心牌润唇膏")
Note
ernieChat() 是基于文心ErnieBot SDK封装的LLM内容生成函数,可替换成任意LLMs接口输入。
from llm2json.output import JSONParser
ernieResult = ernieChat(template)
parser = JSONParser()
print(parser.to_dict(ernieResult))
{
'title': '文心牌润唇膏,滋润保湿不粘腻!',
'context': '✨想要拥有水润双唇吗?试试文心牌润唇膏!💦质地轻盈,一抹即化,保湿效果超赞!💋',
'keywords': ['文心牌润唇膏', '保湿', '轻盈质地', '水润双唇']
}
-
情感分类
class Senta(BaseModel): sentiment: str = Field(description="情感倾向,取值为positive或negative") t = Templates(prompt=""" 我会给你一段评论,请你判断这段评论是正面还是负面的。 评论内容是:{sentiment} """, field=Senta, ) template = t.invoke(sentiment="蛋糕味道不错,店家服务也很热情") ernieResult = ernieChat(template) parser = JSONParser() print(parser.to_dict(ernieResult))
{'sentiment': 'positive'}
-
地址提取
class Address(BaseModel): city: str = Field(description="地级市") t = Templates(prompt=""" 我会给你一个地址,请你从中提取出地级市名称。 地址是:{address} """, field=Address, ) template = t.invoke(address="湖北省武汉市汉阳区琴台大道附近") ernieResult = ernieChat(template) parser = JSONParser() print(parser.to_dict(ernieResult))
{'city': '武汉市'}
-
生成模拟数据
class Data(BaseModel): name: str = Field(description="姓名") idcode: str = Field(description="18位数的身份证号") sex: str = Field(description="性别") phone: str = Field(description="手机号") email: str = Field(description="邮箱") address: str = Field(description="居住地址") date: str = Field(description="入职日期") t = Templates(prompt=""" 请你根据模板生成入职人员测试数据 """, field=Data, ) template = t.invoke() ernieResult = ernieChat(template) parser = JSONParser() print(parser.to_dict(ernieResult))
{ 'name': '张三', 'idcode': '123456789012345678', 'sex': '男', 'phone': '13800138000', 'email': '[email protected]', 'address': '北京市朝阳区建国门外大街甲8号', 'date': '2021-11-21' }
-
More examples will be comming soon…