https://www.bilibili.com/video/BV1yjz5BLEoY
文章目录
- 提示词工程-05、提示词优化案例_金融文本信息抽取
-
- 任务介绍
- 提示词设计
- →提示词:帮我根据给出图片中的任务和示例,创建第七个代码
- ←AI回复
- 运行代码
- [→问AI:为什么`"content": example["content"]`没用json.dumps,`"content": json.dumps(example["answers"], ensure_ascii=False)`这个却用了?只需回答](#→问AI:为什么
"content": example["content"]没用json.dumps,"content": json.dumps(example["answers"], ensure_ascii=False)这个却用了?只需回答) - ←AI回复
- 课后作业
- 课后作业答案
- 提示词工程-06、提示词优化案例_金融文本匹配
提示词工程-05、提示词优化案例_金融文本信息抽取
任务介绍

提示词设计

→提示词:帮我根据给出图片中的任务和示例,创建第七个代码



←AI回复

07_Information_Extraction_FewShot.py
py
import json
import os
from dotenv import load_dotenv
from openai import OpenAI
def main():
"""
信息抽取任务 - Few-Shot 学习示例:
1. 使用 Few-Shot 方式让模型理解信息抽取任务
2. 从金融文本中提取:日期、股票名称、开盘价、收盘价、成交量
3. 按照 JSON 格式输出,缺失信息用 '原文未提及' 表示
"""
# 1. 加载环境变量
load_dotenv()
api_key = os.getenv("API_KEY")
if not api_key:
raise ValueError("未在环境变量或 .env 中找到 API_KEY,请先配置后再运行。")
# 2. 初始化客户端(兼容阿里云 DashScope 的 OpenAI 模式)
client = OpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 也可以使用本地模型:base_url="http://localhost:11434/v1"
# 3. 定义需要抽取的信息字段(Schema)
schema = ['日期', '股票名称', '开盘价', '收盘价', '成交量']
# 4. 定义示例数据(Few-Shot 示例)
examples_data = [
{
"content": "2023-01-10,股市震荡。股票强大科技A股今日开盘价100人民币,一度飙升至105人民币,随后回落至98人民币,最终以102人民币收盘,成交量达到520000。",
"answers": {
"日期": "2023-01-10",
"股票名称": "强大科技A股",
"开盘价": "100人民币",
"收盘价": "102人民币",
"成交量": "520000"
}
},
{
"content": "2024-05-16,股市波动。股票英伟达美股今日开盘价105美元,一度飙升至109美元,随后回落至100美元,最终以116美元收盘,成交量达到3560000。",
"answers": {
"日期": "2024-05-16",
"股票名称": "英伟达美股",
"开盘价": "105美元",
"收盘价": "116美元",
"成交量": "3560000"
}
}
]
# 5. 定义需要抽取信息的问题列表
questions = [
"2025-06-16,股市震荡。股票传智教育A股今日开盘价66人民币,一度飙升至70人民币,随后回落至65人民币,最终以68人民币收盘,成交量达到123000。",
"2025-06-06,股市波动。股票黑马程序员A股今日开盘价200人民币,一度飙升至211人民币,随后回落至201人民币,最终以206人民币收盘。"
]
# 6. 构建消息列表
messages = []
# 6.1 添加系统提示
messages.append({
"role": "system",
"content": f"你帮我完成信息抽取,我给你句子,你抽取{schema}信息,按JSON字符串输出,如果某些信息不存在,用'原文未提及'来表示,参考下面的示例。"
})
# 6.2 添加 Few-Shot 示例(让模型学习如何抽取信息)
for example in examples_data:
# 添加用户输入(待抽取的句子)
messages.append({
"role": "user",
"content": example["content"]
})
# 添加助手回复(期望的抽取结果)
messages.append({
"role": "assistant",
"content": json.dumps(example["answers"], ensure_ascii=False)
})
# 7. 对每个问题进行信息抽取
print("=" * 80)
print("信息抽取任务 - Few-Shot 学习示例")
print("=" * 80)
print(f"\n需要抽取的字段: {schema}")
print(f"\nFew-Shot 示例数量: {len(examples_data)}")
print(f"待抽取的问题数量: {len(questions)}")
print("\n" + "-" * 80)
for i, q in enumerate(questions, 1):
print(f"\n【问题 {i}】")
print(f"原文: {q}")
print("\n抽取结果:")
# 添加当前问题到消息列表
current_messages = messages + [{
"role": "user",
"content": f"按照上述示例,现在抽取这个句子的信息:{q}"
}]
# 调用 API
response = client.chat.completions.create(
model="qwen3-max",
messages=current_messages
)
# 打印抽取结果
result = response.choices[0].message.content
print(result)
# 尝试解析 JSON 并格式化输出
try:
result_dict = json.loads(result)
print("\n格式化后的结果:")
print(json.dumps(result_dict, ensure_ascii=False, indent=2))
except json.JSONDecodeError:
print("(注意: 返回结果不是有效的 JSON 格式)")
print("-" * 80)
print("\n" + "=" * 80)
print("任务完成!")
print("=" * 80)
if __name__ == "__main__":
main()
运行代码
bash
python3 AI_LLM_RAG_Agent_Dev/07_Information_Extraction_FewShot.py
结果:
bash
================================================================================
信息抽取任务 - Few-Shot 学习示例
================================================================================
需要抽取的字段: ['日期', '股票名称', '开盘价', '收盘价', '成交量']
Few-Shot 示例数量: 2
待抽取的问题数量: 2
--------------------------------------------------------------------------------
【问题 1】
原文: 2025-06-16,股市震荡。股票传智教育A股今日开盘价66人民币,一度飙升至70人民币,随后回落至65人民币,最终以68人民币收盘,成交量达到123000。
抽取结果:
{"日期": "2025-06-16", "股票名称": "传智教育A股", "开盘价": "66人民币", "收盘价": "68人民币", "成交量": "123000"}
格式化后的结果:
{
"日期": "2025-06-16",
"股票名称": "传智教育A股",
"开盘价": "66人民币",
"收盘价": "68人民币",
"成交量": "123000"
}
--------------------------------------------------------------------------------
【问题 2】
原文: 2025-06-06,股市波动。股票黑马程序员A股今日开盘价200人民币,一度飙升至211人民币,随后回落至201人民币,最终以206人民币收盘。
抽取结果:
{"日期": "2025-06-06", "股票名称": "黑马程序员A股", "开盘价": "200人民币", "收盘价": "206人民币", "成交量": "原文未提及"}
格式化后的结果:
{
"日期": "2025-06-06",
"股票名称": "黑马程序员A股",
"开盘价": "200人民币",
"收盘价": "206人民币",
"成交量": "原文未提及"
}
--------------------------------------------------------------------------------
================================================================================
任务完成!
================================================================================
→问AI:为什么"content": example["content"]没用json.dumps,"content": json.dumps(example["answers"], ensure_ascii=False)这个却用了?只需回答
←AI回复
因为:
example["content"]已经是字符串,可直接使用。example["answers"]是字典(Python 对象),需要转换为 JSON 字符串才能作为消息内容发送给 API。
json.dumps() 用于将 Python 对象(字典/列表)转换为 JSON 字符串;字符串不需要转换。
课后作业

课后作业答案
→提示词:帮我根据图中的课后作业要求,创建代码8

←AI回复

08_Lottery_Information_Extraction.py
py
import json
import os
from dotenv import load_dotenv
from openai import OpenAI
def main():
"""
彩票信息抽取任务 - Few-Shot 学习示例:
1. 使用 Few-Shot 方式让模型理解彩票信息抽取任务
2. 从彩票文本中提取:期数、中奖号码(红球+篮球)、一等奖
3. 按照 JSON 格式输出
"""
# 1. 加载环境变量
load_dotenv()
api_key = os.getenv("API_KEY")
if not api_key:
raise ValueError("未在环境变量或 .env 中找到 API_KEY,请先配置后再运行。")
# 2. 初始化客户端(兼容阿里云 DashScope 的 OpenAI 模式)
client = OpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 也可以使用本地模型:base_url="http://localhost:11434/v1"
# 3. 定义需要抽取的信息字段(Schema)
schema = ['期数', '中奖号码', '一等奖']
# 4. 定义示例数据(Few-Shot 示例)
examples_data = [
{
"content": "2025年第100期,开好红球22 21 06 01 03 11 篮球 07,一等奖中奖为2注。",
"answers": {
"期数": "2025100",
"中奖号码": [1, 3, 6, 11, 21, 22, 7],
"一等奖": "2注"
}
},
{
"content": "2025101期,有3注1等奖,10注2等奖,开号篮球11,中奖红球3、5、7、11、12、16。",
"answers": {
"期数": "2025101",
"中奖号码": [3, 5, 7, 11, 12, 16, 11],
"一等奖": "3注"
}
}
]
# 5. 定义需要抽取信息的问题列表(根据作业要求,应该有5条文本,这里提供3条作为测试)
questions = [
"2025年第102期,开好红球05 12 18 23 28 33 篮球 09,一等奖中奖为5注。",
"2025103期,有1注1等奖,20注2等奖,开号篮球15,中奖红球2、8、14、19、25、30。",
"2025年第104期,开好红球01 07 13 20 26 31 篮球 04,一等奖中奖为0注。"
]
# 6. 构建消息列表
messages = []
# 6.1 添加系统提示
messages.append({
"role": "system",
"content": f"你是一个彩票信息抽取专家。请从彩票文本中提取以下信息:{schema}。\n\n"
f"提取规则:\n"
f"1. 期数:提取年份和期号,格式为YYYYNNN(如'2025年第100期'提取为'2025100','2025101期'提取为'2025101')\n"
f"2. 中奖号码:提取所有红球号码(按升序排列)和篮球号码,篮球号码放在最后。如果篮球号码与红球号码重复,也要包含在列表中。\n"
f"3. 一等奖:提取一等奖的中奖注数,格式为'数字+注'(如'2注'、'3注')\n\n"
f"请按照JSON格式输出,参考下面的示例。"
})
# 6.2 添加 Few-Shot 示例(让模型学习如何抽取信息)
for example in examples_data:
# 添加用户输入(待抽取的句子)
messages.append({
"role": "user",
"content": example["content"]
})
# 添加助手回复(期望的抽取结果)
messages.append({
"role": "assistant",
"content": json.dumps(example["answers"], ensure_ascii=False)
})
# 7. 对每个问题进行信息抽取
print("=" * 80)
print("彩票信息抽取任务 - Few-Shot 学习示例")
print("=" * 80)
print(f"\n需要抽取的字段: {schema}")
print(f"\nFew-Shot 示例数量: {len(examples_data)}")
print(f"待抽取的问题数量: {len(questions)}")
print("\n" + "-" * 80)
for i, q in enumerate(questions, 1):
print(f"\n【问题 {i}】")
print(f"原文: {q}")
print("\n抽取结果:")
# 添加当前问题到消息列表
current_messages = messages + [{
"role": "user",
"content": f"请按照上述示例,抽取以下彩票文本的信息:{q}"
}]
# 调用 API
response = client.chat.completions.create(
model="qwen3-max",
messages=current_messages
)
# 打印抽取结果
result = response.choices[0].message.content
print(result)
# 尝试解析 JSON 并格式化输出
try:
result_dict = json.loads(result)
print("\n格式化后的结果:")
print(json.dumps(result_dict, ensure_ascii=False, indent=2))
except json.JSONDecodeError:
print("(注意: 返回结果不是有效的 JSON 格式)")
print("-" * 80)
print("\n" + "=" * 80)
print("任务完成!")
print("=" * 80)
if __name__ == "__main__":
main()
运行代码
bash
python3 AI_LLM_RAG_Agent_Dev/08_Lottery_Information_Extraction.py
结果:
bash
================================================================================
需要抽取的字段: ['期数', '中奖号码', '一等奖']
Few-Shot 示例数量: 2
待抽取的问题数量: 3
--------------------------------------------------------------------------------
【问题 1】
原文: 2025年第102期,开好红球05 12 18 23 28 33 篮球 09,一等奖中奖为5注。
抽取结果:
{"期数": "2025102", "中奖号码": [5, 12, 18, 23, 28, 33, 9], "一等奖": "5注"}
格式化后的结果:
{
"期数": "2025102",
"中奖号码": [
5,
12,
18,
23,
28,
33,
9
],
"一等奖": "5注"
}
--------------------------------------------------------------------------------
【问题 2】
原文: 2025103期,有1注1等奖,20注2等奖,开号篮球15,中奖红球2、8、14、19、25、30。
抽取结果:
{"期数": "2025103", "中奖号码": [2, 8, 14, 19, 25, 30, 15], "一等奖": "1注"}
格式化后的结果:
{
"期数": "2025103",
"中奖号码": [
2,
8,
14,
19,
25,
30,
15
],
"一等奖": "1注"
}
--------------------------------------------------------------------------------
【问题 3】
原文: 2025年第104期,开好红球01 07 13 20 26 31 篮球 04,一等奖中奖为0注。
抽取结果:
{"期数": "2025104", "中奖号码": [1, 7, 13, 20, 26, 31, 4], "一等奖": "0注"}
格式化后的结果:
{
"期数": "2025104",
"中奖号码": [
1,
7,
13,
20,
26,
31,
4
],
"一等奖": "0注"
}
--------------------------------------------------------------------------------
================================================================================
任务完成!
================================================================================
提示词工程-06、提示词优化案例_金融文本匹配
任务介绍

提示词设计

→提示词:根据给定图片任务要求,帮我创建第九个代码


←AI回复

09_Text_Matching_FewShot.py
py
import os
from dotenv import load_dotenv
from openai import OpenAI
def main():
"""
文本匹配任务 - Few-Shot 学习示例:
1. 使用 Few-Shot 方式让模型理解文本匹配任务
2. 识别成对的句子中,2句话是否有关联
3. 按照指定格式输出:'是' 或 '不是'
"""
# 1. 加载环境变量
load_dotenv()
api_key = os.getenv("API_KEY")
if not api_key:
raise ValueError("未在环境变量或 .env 中找到 API_KEY,请先配置后再运行。")
# 2. 初始化客户端(兼容阿里云 DashScope 的 OpenAI 模式)
client = OpenAI(
api_key=api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 也可以使用本地模型:base_url="http://localhost:11434/v1"
# 3. 定义 Few-Shot 示例数据(让模型学习什么是文本匹配任务)
examples_data = [
{
"sentence1": "公司ABC发布了季度财报,显示盈利增长。",
"sentence2": "财报披露,公司ABC利润上升",
"answer": "是"
},
{
"sentence1": "黄金价格下跌,投资者抛售。",
"sentence2": "外汇市场交易额创下新高",
"answer": "不是"
}
]
# 4. 定义需要判断的文本对(测试数据)
test_pairs = [
{
"sentence1": "股票市场今日大涨,投资者乐观。",
"sentence2": "持续上涨的市场让投资者感到满意。"
},
{
"sentence1": "油价大幅下跌,能源公司面临挑战。",
"sentence2": "未来智能城市的建设趋势愈发明显。"
},
{
"sentence1": "利率上升,影响房地产市场。",
"sentence2": "高利率对房地产有一定冲击。"
}
]
# 5. 构建消息列表
messages = []
# 5.1 添加系统提示(解释什么是文本匹配任务)
messages.append({
"role": "system",
"content": "你是一个文本匹配专家。你的任务是判断给定的两个句子是否有关联。\n\n"
"如果两个句子在语义上相关、讨论同一主题或存在逻辑关联,则回答'是';\n"
"如果两个句子在语义上无关、讨论不同主题或不存在逻辑关联,则回答'不是'。\n\n"
"请按照以下格式输出:\n"
"- 如果有关联,输出:是\n"
"- 如果无关联,输出:不是"
})
# 5.2 添加 Few-Shot 示例(让模型学习如何判断文本匹配)
for example in examples_data:
# 添加用户输入(待判断的句子对)
messages.append({
"role": "user",
"content": f"句子一:{example['sentence1']}\n句子二:{example['sentence2']}"
})
# 添加助手回复(期望的判断结果)
messages.append({
"role": "assistant",
"content": example["answer"]
})
# 6. 对每个文本对进行匹配判断
print("=" * 80)
print("文本匹配任务 - Few-Shot 学习示例")
print("=" * 80)
print(f"\nFew-Shot 示例数量: {len(examples_data)}")
print(f"待判断的文本对数量: {len(test_pairs)}")
print("\n" + "-" * 80)
# 显示 Few-Shot 示例
print("\n【Few-Shot 示例】")
for i, example in enumerate(examples_data, 1):
print(f"\n示例 {i}:")
print(f" 句子一: {example['sentence1']}")
print(f" 句子二: {example['sentence2']}")
print(f" 答案: {example['answer']}")
print("\n" + "-" * 80)
# 对每个测试文本对进行判断
results = []
for i, pair in enumerate(test_pairs, 1):
print(f"\n【测试 {i}】")
print(f"句子一: {pair['sentence1']}")
print(f"句子二: {pair['sentence2']}")
print("\n判断结果:")
# 添加当前问题到消息列表
current_messages = messages + [{
"role": "user",
"content": f"句子一:{pair['sentence1']}\n句子二:{pair['sentence2']}"
}]
# 调用 API
response = client.chat.completions.create(
model="qwen3-max",
messages=current_messages
)
# 获取判断结果
result = response.choices[0].message.content.strip()
print(result)
results.append(result)
print("-" * 80)
# 7. 汇总结果
print("\n" + "=" * 80)
print("结果汇总")
print("=" * 80)
print(f"\n期望结果: ['是', '不是', '是']")
print(f"实际结果: {results}")
# 验证结果
expected_results = ['是', '不是', '是']
correct_count = sum(1 for i, (expected, actual) in enumerate(zip(expected_results, results))
if expected == actual)
print(f"\n正确率: {correct_count}/{len(test_pairs)} ({correct_count/len(test_pairs)*100:.1f}%)")
print("\n" + "=" * 80)
print("任务完成!")
print("=" * 80)
if __name__ == "__main__":
main()
运行代码
bash
python3 AI_LLM_RAG_Agent_Dev/09_Text_Matching_FewShot.py
结果:
bash
================================================================================
文本匹配任务 - Few-Shot 学习示例
================================================================================
Few-Shot 示例数量: 2
待判断的文本对数量: 3
--------------------------------------------------------------------------------
【Few-Shot 示例】
示例 1:
句子一: 公司ABC发布了季度财报,显示盈利增长。
句子二: 财报披露,公司ABC利润上升
答案: 是
示例 2:
句子一: 黄金价格下跌,投资者抛售。
句子二: 外汇市场交易额创下新高
答案: 不是
--------------------------------------------------------------------------------
【测试 1】
句子一: 股票市场今日大涨,投资者乐观。
句子二: 持续上涨的市场让投资者感到满意。
判断结果:
是
--------------------------------------------------------------------------------
【测试 2】
句子一: 油价大幅下跌,能源公司面临挑战。
句子二: 未来智能城市的建设趋势愈发明显。
判断结果:
不是
--------------------------------------------------------------------------------
【测试 3】
句子一: 利率上升,影响房地产市场。
句子二: 高利率对房地产有一定冲击。
判断结果:
是
--------------------------------------------------------------------------------
================================================================================
结果汇总
================================================================================
期望结果: ['是', '不是', '是']
实际结果: ['是', '不是', '是']
正确率: 3/3 (100.0%)
================================================================================
任务完成!
================================================================================