LangChain进行格式化输出

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


LangChain是一个强大的框架,可以帮助开发者更高效地构建基于大型语言模型(LLM)的应用。在实际开发中,我们常常希望模型的输出不是一段纯文本,而是结构化、格式化的数据(如JSON、表格等),以便下游进一步处理。

一、为什么需要格式化输出?

  • 结构化数据易于处理

    可以直接转换为数据库记录、前端展示等。

  • 方便后续逻辑判断

    如根据意图分类或信息抽取结果做不同操作。

  • 提升交互体验

    让用户或系统能更好地理解和利用LLM的输出内容。

二、LangChain中的输出解析器(Output Parser)

https://python.langchain.com/api_reference/core/output_parsers.html
LangChain提供了多种内置的OutputParser,也支持自定义。常用的有:

  • StrOutputParser

    :直接返回字符串(默认)

  • JsonOutputParser

    :解析JSON格式内容

三、代码实战——让LLM返回JSON格式的测试用例

1、安装依赖

pip install -U langchain langchain_core langchain-openai openai pydantic

2、使用LangSmith观察结果

https://smith.langchain.com/

import os  

os.environ["LANGSMITH_TRACING"] = "true"  
os.environ["LANGSMITH_API_KEY"] = "lsv2_xxx"  

3、编写想要输出的json格式

from pydantic import BaseModel, Field  

class TestCase(BaseModel):  
    Method: str = Field(description="测试方法名称,例如:等价类划分、边界值分析、场景法、状态转换、安全测试、性能测试 等")  
    caseDesc: str = Field(description="用例描述")  
    caseStep: str = Field(description="用例步骤")  
    expectResult: str = Field(description="用例预期结果")  

4、拼接提示词

from langchain_core.prompts import PromptTemplate 
from langchain_core.output_parsers.json import JsonOutputParser

parser = JsonOutputParser(pydantic_object=TestCase)  

template = """你是一名资深测试工程师。请根据下述模块说明,使用适当的测试方法,编写完整的功能测试用例,数量不少于10条:  
模块说明: {module_desc}  
{format_instructions}  
"""  

prompt = PromptTemplate(  
    template=template,  
    input_variables=["module_desc"],  
    partial_variables={"format_instructions": parser.get_format_instructions()},  
)  

5、调用大模型

from langchain_openai import ChatOpenAI  


llm = ChatOpenAI(  
    model="gpt-4.1",  
    api_key="sk-xxx",  
    base_url="https://oneapi.qunhequnhe.com/v1"  
)  

chain = prompt | llm | parser  
chain.invoke({"module_desc": "登录场景"})

四、查看结果

1、查看运行结果

image.png

2、查看LangSmith结果

可以看到合并后的提示词:

你是一名资深测试工程师。请根据下述模块说明,使用适当的测试方法,编写完整的功能测试用例,数量不少于10条:
模块说明: 登录场景
The output should be formatted as a JSON instance that conforms to the JSON schema below.

As an example, for the schema {"properties": {"foo": {"title": "Foo", "description": "a list of strings", "type": "array", "items": {"type": "string"}}}, "required": ["foo"]}
the object {"foo": ["bar", "baz"]} is a well-formatted instance of the schema. The object {"properties": {"foo": ["bar", "baz"]}} is not well-formatted.

Here is the output schema:
"""
{"properties": {"Method": {"description": "测试方法名称,例如:等价类划分、边界值分析、场景法、状态转换、安全测试、性能测试 等", "title": "Method", "type": "string"}, "caseDesc": {"description": "用例描述", "title": "Casedesc", "type": "string"}, "caseStep": {"description": "用例步骤", "title": "Casestep", "type": "string"}, "expectResult": {"description": "用例预期结果", "title": "Expectresult", "type": "string"}}, "required": ["Method", "caseDesc", "caseStep", "expectResult"]}
"""

image.png

五、小结

LangChain 之所以能够按照指定格式输出,核心原因就在于它对 提示词(Prompt)进行了优化和封装。

  • 优化提示词:加入具体的格式说明。
  • 引导模型生成规范结构文本/JSON等。
  • 用解析工具辅助检查/提取。
    通过这三步,LangChain 实现了高效且可靠的“指定格式输出”。

利用LangChain中的Prompt设计与Output Parser机制,可以方便地让大模型按照指定的数据结构(如JSON)返回结果,大大提升了工程效率和可维护性。在实际项目中建议优先使用Pydantic来约束数据类型,提高安全性与健壮性。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​

### LangChain 中实现格式化输出的方法 LangChain 是一种用于构建语言模型应用程序的框架,它提供了多种工具来帮助开发者更高效地利用大模型完成各种任务。其中一个重要功能就是 **结构化输出** 或者称为 **格式化输出** 的能力。 以下是关于如何在 LangChain 中实现格式化输出的具体方法: #### 1. 结构化输出的核心概念 通过 LangChain 调用大模型时,可以定义输入模板以及期望的输出格式。这通常涉及以下几个部分: - 定义提示词(Prompt Template),指定希望从自然语言中提取的信息类型。 - 配置链路(Chain),将提示词传递给大模型并解析返回的结果。 - 解析结果以满足所需的结构化数据形式[^1]。 #### 2. 提取特定信息的示例 以下是一个具体的例子,展示如何使用 LangChain 来从一段文字中提取数字或日期时间等信息。 ##### 示例:从文本中提取数字 假设我们有一段描述产品价格的文字,并希望通过 LangChain 和大模型从中提取具体的价格数值。 ```python from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain # 创建一个简单的提示模板 prompt_template = """请从下面这段话中提取所有的数字,并按照从小到大的顺序排列。\n\n{input_text}\n""" prompt = PromptTemplate(template=prompt_template, input_variables=["input_text"]) # 初始化LLM实例 llm = OpenAI(model_name="text-davinci-003") # 构建链路 chain = LLMChain(prompt=prompt, llm=llm) # 输入样本文本 result = chain.run(input_text="这款手机售价为998元,而另一款则只需499元。") print(result) ``` 上述代码会输出两个数字 `499` 和 `998` 并按升序排列。 --- ##### 示例:从文本中提取日期和时间 如果目标是从自然语言中提取日期或者时间,则可以通过调整提示模板的方式实现这一需求。 ```python from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain # 创建一个新的提示模板 date_prompt_template = """请分析下列语句中的日期和时间信息,并将其转换成标准 ISO 8601 格式的字符串表示法。\n\n{sentence_with_date_time}""" date_prompt = PromptTemplate(template=date_prompt_template, input_variables=["sentence_with_date_time"]) # 初始化LLM实例 llm = OpenAI() # 构建新的链路 date_chain = LLMChain(prompt=date_prompt, llm=llm) # 测试样例 output = date_chain.run(sentence_with_date_time="会议定于下周五下午三点举行。") print(output) ``` 此脚本能够识别出句子中的相对时间和绝对时间表达方式,并尝试标准化它们[^2]。 --- #### 3. 进一步优化——自定义解析逻辑 对于某些复杂场景下的结构化输出需求,可能还需要额外编写后处理函数来进一步清洗和整理来自大模型的回答。例如,在上面提到的时间提取案例里,我们可以增加一层 Python 函数用来验证最终得到的是不是合法的 ISO 时间戳。 ```python import re from datetime import datetime def parse_iso_timestamp(response): pattern = r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?Z?" matches = re.findall(pattern, response) parsed_dates = [] for match in matches: try: dt_obj = datetime.fromisoformat(match.replace('Z', '+00:00')) parsed_dates.append(dt_obj.isoformat()) except ValueError as e: pass return parsed_dates or ["无法解析有效的时间"] cleaned_result = parse_iso_timestamp(output) print(cleaned_result) ``` 以上片段展示了如何结合正则表达式与内置库一起工作,从而提高程序鲁棒性和准确性[^3]。 --- #### 总结 综上所述,LangChain 不仅简化了与大型预训练模型交互的过程,还允许用户灵活定制其行为模式以便适应不同类型的业务需求。无论是简单的内容替换还是复杂的多步推理过程都可以轻松应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值