You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过LangChain优化Llama2-2b地址实体提取,解决无实体误返回问题?

问题:Llama2-2b地址拆分时错误补全缺失实体

使用Llama2-2b模型执行地址拆分任务,需从输入字符串中提取城市、州/邦、国家三类实体。当前问题是:当输入字符串中不存在某类实体时,模型仍会自动补全该实体(期望返回Not present)。

示例

输入:

"32, Panaji Beach Road, Panaji, Goa"

当前错误输出:

City: Panaji
State: Goa
Country: India  # 此处应返回"Not present"

期望输出:

City: Panaji
State: Goa
Country: Not present

现有代码

address_template = """
Answer the question without explanation.

What is city, state and country in "{address_string}".
"""

prompt = PromptTemplate(
    input_variables = ['address_string'],
    template=address_template,
)

from langchain.chains import LLMChain

chain = LLMChain(llm=llm,
                 prompt=prompt,
                 verbose=True)
string1 = "32, Panaji Beach Road, Panaji, 403001, India"
# Run the chain only specifying the input variable.

print(chain.run(string1))

解决方案:优化Prompt模板

Llama2-2b作为小参数模型,对模糊指令的理解能力较弱,需要更明确、结构化的约束来纠正错误补全行为:

基础优化版Prompt

address_template = """
严格遵循以下规则处理地址字符串:
1. 仅从输入的"{address_string}"中提取城市、州/邦、国家实体,**绝对不能补全输入中未提及的内容**。
2. 若某类实体在输入中不存在,必须返回`Not present`。
3. 输出格式固定为:
City: [提取结果或Not present]
State: [提取结果或Not present]
Country: [提取结果或Not present]
4. 不得添加任何额外解释或说明。

处理地址字符串:"{address_string}"
"""

进阶Few-Shot引导版(若基础版仍失效)

加入示例进一步明确规则,降低模型理解偏差:

address_template = """
按照以下示例和规则处理地址字符串:

示例1:
输入:"32, Panaji Beach Road, Panaji, Goa"
输出:
City: Panaji
State: Goa
Country: Not present

示例2:
输入:"123 Main St, New York, USA"
输出:
City: New York
State: Not present
Country: USA

规则:
1. 仅从输入的"{address_string}"中提取内容,绝不补全未提及的实体。
2. 缺失的实体必须返回`Not present`。
3. 严格遵循上述输出格式,不要添加额外内容。

处理地址字符串:"{address_string}"
"""

关键优化说明

  • 用强约束词汇(如绝对不能)明确禁止补全行为
  • 固定输出格式,压缩模型自由发挥的空间
  • 小参数模型对列表式规则和示例的理解远优于模糊的自然语言描述

内容的提问来源于stack exchange,提问作者AP J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:47:32