From 10a6a7051a35100af042eaf6de1b44a833fce6c6 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Mon, 13 Apr 2026 20:57:38 +0800 Subject: [PATCH] v0.0.4 parser --- README.md | 11 ++++++++++- parser/json_parser_demo.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 parser/json_parser_demo.py diff --git a/README.md b/README.md index 46d6658..aa6a164 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LangChain Learning -[![](https://img.shields.io/badge/version-0.0.3-blue.svg)](https://github.com/your-repo/langchain-learning) +[![](https://img.shields.io/badge/version-0.0.4-blue.svg)](https://github.com/your-repo/langchain-learning) [![](https://img.shields.io/badge/python-3.11+-green.svg)](https://www.python.org/) [![](https://img.shields.io/badge/LangChain-v1.2-orange.svg)](https://www.langchain.com/) @@ -11,6 +11,7 @@ - **多 LLM 集成**:支持 OpenAI API、SiliconFlow 及 LangChain 抽象层 - **流式响应**:实时流式输出,带来更好的使用体验 - **Prompt 工程**:多种 Prompt 模板构建方式 +- **输出解析**:支持 JSON 等格式解析 - **Token 用量追踪**:轻松监控 API 调用消耗 - **实战示例**:从基础到进阶的使用模式 @@ -50,6 +51,12 @@ SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1 | Few-shot Learning | `python prompt/fewshot_demo.py` | 带示例的少样本提示学习 | | 从文件加载 Prompt | `python prompt/promt_from_file.py` | 从 YAML 文件加载提示词模板 | +**输出解析示例** + +| 示例 | 命令 | 说明 | +|------|------|------| +| JSON 解析器 | `python parser/json_parser_demo.py` | 使用 JsonOutputParser 解析 LLM 输出 | + **Token 用量示例** | 示例 | 命令 | 说明 | @@ -70,6 +77,8 @@ langchain-learning/ │ ├── fewshot_demo.py # Few-shot Learning 示例 │ ├── promt_from_file.py # 从文件加载 Prompt │ └── prompt_from_file.yaml # Prompt 模板文件 +├── parser/ +│ └── json_parser_demo.py # JSON 输出解析示例 ├── token/ │ └── token_demo.py # Token 用量追踪示例 ├── main.py # 入口文件 diff --git a/parser/json_parser_demo.py b/parser/json_parser_demo.py new file mode 100644 index 0000000..a3c61df --- /dev/null +++ b/parser/json_parser_demo.py @@ -0,0 +1,38 @@ +import logging + +from langchain_core.output_parsers import JsonOutputParser +from langchain_core.prompts import PromptTemplate +from langchain_openai import ChatOpenAI +import os +import dotenv + +logging.basicConfig( + level=logging.DEBUG, + format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" +) +dotenv.load_dotenv() + +## 设置环境变量 +os.environ['OPENAI_API_KEY'] = os.getenv("SILICONFLOW_API_KEY") +os.environ['OPENAI_BASE_URL'] = os.getenv("SILICONFLOW_BASE_URL") + +# 默认的 'model_name': 'deepseek-ai/DeepSeek-V3.1', +llm = ChatOpenAI(model="deepseek-ai/DeepSeek-R1-0528-Qwen3-8B") + + + +output_parser = JsonOutputParser() +print(output_parser.get_format_instructions()) + +message = "讲一个简短的笑话" +prompt = PromptTemplate( + template="用中文回答用户的请求。\n{format_instruction}\n{query}", + input_variables = ["query"], + partial_variables={"format_instruction":output_parser.get_format_instructions()} +) + +chain = prompt | llm | output_parser + +response = chain.invoke({"query":message}) +print(response) +print(type(response)) \ No newline at end of file