LangChain开发:Python实现AI结果验证

云信安装大师
90
AI 质量分
2 5 月, 2025
3 分钟阅读
0 阅读

LangChain开发:Python实现AI结果验证

引言

在AI应用开发中,我们经常需要处理大语言模型(LLM)的输出结果。由于LLM生成的内容具有不确定性,如何验证这些结果的准确性和可靠性成为关键问题。本文将介绍如何使用LangChain框架结合Python来验证AI生成的结果。

准备工作

环境要求

  • Python 3.8+
  • pip包管理工具
  • OpenAI API密钥(或其他LLM服务密钥)

安装依赖

代码片段
pip install langchain openai python-dotenv

创建.env文件

在项目根目录下创建.env文件,添加你的OpenAI API密钥:

代码片段
OPENAI_API_KEY=your-api-key-here

LangChain结果验证基础

LangChain提供了多种验证AI输出的方法,主要包括:
1. 输出解析器(Output Parsers) – 确保输出符合特定格式
2. 自定义验证器 – 编写规则验证内容准确性
3. 自洽性检查 – 让模型自我验证输出

完整示例:天气查询结果验证

让我们通过一个天气查询的示例来演示如何实现AI结果验证。

1. 创建基础链

代码片段
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from dotenv import load_dotenv
import os

# 加载环境变量
load_dotenv()

# 初始化聊天模型
chat = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")

# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([
    ("system", "你是一个天气助手,根据用户提供的城市返回天气信息。"),
    ("human", "告诉我{city}当前的天气情况")
])

# 创建基础链
basic_chain = prompt_template | chat

2. 添加输出解析器

代码片段
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from langchain.schema import OutputParserException

# 定义响应模式
response_schemas = [
    ResponseSchema(name="city", description="查询的城市名称"),
    ResponseSchema(name="temperature", description="当前温度,单位摄氏度"),
    ResponseSchema(name="condition", description="天气状况描述"),
    ResponseSchema(name="confidence", description="回答的置信度,0-100")
]

output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

# 更新提示模板以包含格式指令
format_instructions = output_parser.get_format_instructions()
prompt_template = ChatPromptTemplate.from_messages([
    ("system", f"你是一个天气助手,根据用户提供的城市返回天气信息。\n{format_instructions}"),
    ("human", "告诉我{city}当前的天气情况")
])

# 创建带解析器的链
parsing_chain = prompt_template | chat | output_parser

try:
    result = parsing_chain.invoke({"city": "北京"})
    print(result)
except OutputParserException as e:
    print(f"解析失败: {e}")

3. 自定义内容验证器

代码片段
from typing import Dict, Any

def validate_weather_data(data: Dict[str, Any]) -> bool:
    """自定义天气数据验证函数"""

    # 检查必要字段是否存在
    required_fields = ['city', 'temperature', 'condition', 'confidence']
    if not all(field in data for field in required_fields):
        return False

    # 检查温度是否为数字且在合理范围内(-50到50)
    try:
        temp = float(data['temperature'])
        if not (-50 <= temp <= 50):
            return False
    except ValueError:
        return False

    # 检查置信度是否为整数且在0-100之间
    try:
        confidence = int(data['confidence'])
        if not (0 <= confidence <= 100):
            return False
    except ValueError:
        return False

    # 检查城市名称是否非空且长度合理(2-50字符)
    city = data['city'].strip()
    if not (2 <= len(city) <= 50):
        return False

    return True

# 使用验证函数处理结果
result = parsing_chain.invoke({"city": "北京"})
if validate_weather_data(result):
    print("数据验证通过:", result)
else:
    print("数据验证失败:", result)

4. LLM自洽性检查

代码片段
from langchain.schema import StrOutputParser

verification_prompt = """
请分析以下天气信息是否合理。考虑以下因素:
1. 温度值是否在合理范围内(-50到50摄氏度)
2. 天气描述是否符合常识(如不会同时出现"晴天"和"暴雨")
3. {city}在这个季节通常的天气模式

原始信息: {original_info}

请用JSON格式返回你的分析结果,包含以下字段:
- "is_reasonable": (true/false)
- "issues": [列出发现的问题]
- "confidence": (0-100表示你对判断的信心)
"""

verification_chain = (
    {"original_info": lambda x: str(x), "city": lambda x: x["city"]}
    | ChatPromptTemplate.from_template(verification_prompt)
    | chat 
    | StrOutputParser()
)

def full_validation(city: str):
    """完整的验证流程"""

    # Step1:获取原始响应并解析为结构化数据


if validate_weather_data(result):
            print("初步数据格式验证通过")

            # Step3: LLM自洽性检查


print("\n完整示例运行结束")

[继续…]

由于篇幅限制,以下是完整实现的剩余部分:

代码片段
def full_validation(city: str):
"""完整的验证流程"""

# Step1:获取原始响应并解析为结构化数据

try:
result=parsing_chain.invoke({"city": city})
print("原始响应:", result)

# Step2:自定义格式和逻辑验证

if validate_weather_data(result):  
print("初步数据格式验证通过")

# Step3: LLM自洽性检查

verification_result=verification_chain.invoke({
"original_info": result,
"city": city  
})

print("\n自洽性检查结果:")
print(verification_result)

return {
"original_data": result,
"validation_result": verification_result,
"is_valid": validate_weather_data(result)  
}

except OutputParserException as e:
print(f"\n错误:无法解析响应 - {e}")
return None  

except Exception as e:
print(f"\n发生意外错误 - {e}")
return None  

#运行完整示例  

if __name__=="__main__":
validation_result=full_validation("北京")  
if validation_result:

print("\n最终验证摘要:")
print(f"-城市:{validation_result['original_data']['city']}")
print(f"-温度:{validation_result['original_data']['temperature']}°C")  
print(f"-状态:{validation_result['original_data']['condition']}")
print(f"-置信度:{validation_result['original_data']['confidence']}%")  

print("\n完整示例运行结束")  

实践经验和注意事项

1.温度参数调整:根据实际需求调整validate\_weather\_data中的参数范围

2.错误处理:在生产环境中应添加更完善的错误处理和日志记录

3.性能考虑:LLM自洽性检查会增加API调用次数和延迟

4.混合策略:对于关键应用,建议结合多种验证方法

5.阈值设置:根据应用场景设置合理的置信度阈值(如只接受>80%的结果)

6.成本优化:可以通过缓存常见查询结果减少API调用

7.定期评估:随着模型更新,定期重新评估你的验证逻辑的有效性

总结

本文介绍了使用LangChain进行AI结果验证的三种主要方法:

1.结构化输出解析确保数据格式正确
2.自定义校验规则保证内容合理性
3.LLM自洽性检查利用模型自我评估输出可靠性

通过组合这些技术,你可以显著提高AI应用的可靠性和用户体验。关键点是:

•始终定义明确的数据结构
•实施多层校验机制
•记录和分析校验失败的案例以改进系统

原创 高质量