From 5db04c3c05f0593b52a4bd54f0ce22520ca88bb4 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Sun, 12 Apr 2026 20:12:56 +0800 Subject: [PATCH] v0.0.3 - token --- README.md | 11 ++++++++++- token/token_demo.py | 27 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 token/token_demo.py diff --git a/README.md b/README.md index 5ce1507..46d6658 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LangChain Learning -[![](https://img.shields.io/badge/version-0.0.2-blue.svg)](https://github.com/your-repo/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/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 模板构建方式 +- **Token 用量追踪**:轻松监控 API 调用消耗 - **实战示例**:从基础到进阶的使用模式 ## 快速开始 @@ -49,6 +50,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 文件加载提示词模板 | +**Token 用量示例** + +| 示例 | 命令 | 说明 | +|------|------|------| +| Token 追踪 | `python token/token_demo.py` | 使用 get_openai_callback 追踪 token 消耗 | + ## 项目结构 ``` @@ -63,6 +70,8 @@ langchain-learning/ │ ├── fewshot_demo.py # Few-shot Learning 示例 │ ├── promt_from_file.py # 从文件加载 Prompt │ └── prompt_from_file.yaml # Prompt 模板文件 +├── token/ +│ └── token_demo.py # Token 用量追踪示例 ├── main.py # 入口文件 ├── pyproject.toml # 项目配置 └── README.md diff --git a/token/token_demo.py b/token/token_demo.py new file mode 100644 index 0000000..155c162 --- /dev/null +++ b/token/token_demo.py @@ -0,0 +1,27 @@ + +from langchain_community.callbacks import get_openai_callback +from langchain_core.prompts import FewShotChatMessagePromptTemplate, PromptTemplate +from langchain_openai import ChatOpenAI +import os +import dotenv + +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") +template = PromptTemplate.from_template("给我讲一个关于{topic}的冷笑话") +chain = template | llm + +with get_openai_callback() as cb: + response = chain.invoke({"topic":"特朗普"}) + print(response) + +print("------") +print(f"total_tokens:{cb.total_tokens}") +print(f"prompt_tokens :{cb.prompt_tokens}") +print(f"completion_tokens:{cb.completion_tokens}") +print(f"total_cost:{cb.total_cost}") \ No newline at end of file