项目介绍
介绍
Kor是一个帮助用户从文本中提取结构化数据的半成品原型工具,利用大型语言模型(LLMs)实现这一目标。用户需要提供一个提取方案,并给出一些示例,Kor会根据方案生成提示,发送给指定的LLM并解析输出。这实际上是另一个基于LLM的抽象封装。Kor还与LangChain框架集成。
Kor和LangChain的关系
利用LLMs进行信息提取的方法主要有三种:
- 基于提示/解析
- 函数/工具调用
- JSON模式
Kor在解析方法上有不错的实现,可以适用于各种支持不同功能的LLMs。提取的质量主要依赖于好的参考示例和明确的方案文档。
最新版本(1.0.0)发布
Kor已经升级到1.0.0版本,兼容Pydantic的两个版本(v1和v2)。这次升级主要是为了应对Pydantic v2带来的重大变化,比如需要为任何可选字段指定默认值,以及更严格的类型检查。Kor在Pydantic v2上的序列化尚未实现。
Kor风格方案
Kor允许用户定义一个抽象的提取方案,比如控制音乐播放器的简单指令,包括歌曲、专辑、艺术家和操作等。
from langchain.chat_models import ChatOpenAI
from kor import create_extraction_chain, Object, Text
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0, max_tokens=2000)
schema = Object(
id="player",
description="用户控制音乐播放器的动作",
attributes=[
Text(id="song", description="歌曲"),
Text(id="album", description="专辑"),
Text(id="artist", description="艺术家"),
Text(id="action", description="操作", examples=[("请停下音乐", "stop")]),
],
many=False,
)
chain = create_extraction_chain(llm, schema, encoder_or_encoder_class='json')
chain.invoke("播放保罗·西蒙、齐柏林飞艇和门的歌曲")['data']
Pydantic风格方案
用户也可以使用Pydantic的方式定义方案,同样能够对请求进行验证和结构化。
from pydantic import BaseModel, Field
from enum import Enum
class Action(Enum):
play = "play"
stop = "stop"
next_ = "next"
previous = "previous"
class MusicRequest(BaseModel):
song: Optional[List[str]] = Field(default=None, description="歌曲")
album: Optional[List[str]] = Field(default=None, description="专辑")
artist: Optional[List[str]] = Field(default=None, description="艺术家")
action: Optional[Action] = Field(default=None, description="操作", examples=[("请停下音乐", "stop")])
兼容性和安装
Kor通过Python版本3.8至3.11的测试。想要安装这款工具,可以运行以下命令:
pip install kor
项目限制与建议
Kor目前还处于原型阶段,API不稳定,存在一些问题和限制,比如处理长文本时可能出现崩溃,但随着LLM的进步,这些问题可能会得到改善。
贡献与反馈
欢迎有想法和建议的用户打开问题讨论,更多贡献信息可参考CONTRIBUTING.md。同时,也推荐一些替代工具如Promptify和MiniChain。