这是一个简单的 LangChain Hello World 示例,演示如何使用通义千问 API 实现文本生成和问答功能。项目提供了三个通用的模型调用函数,可以满足不同的使用场景。
代码示例:
https://pan.baidu.com/s/1mKYLKGwkaPWQZ4NgNFXNdg?pwd=yaki 提取码: yaki
学习目标
了解如何在 LangChain 中使用通义千问 API
掌握基本的文本生成和问答功能
学习如何封装通用的模型调用函数
理解系统提示词的作用
掌握模板化提示词的使用方法
在开始使用 LangChain 和通义千问 API 之前,需要导入必要的模块。以下是代码中使用的 import 语句及其详细说明:
import os
from langchain_community.chat_models import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import dashscope
1. import os
作用:Python 标准库,用于访问操作系统功能
本项目中用途:从环境变量中获取 API Key
api_key = os.environ.get(‘DASHSCOPE_API_KEY’)
为什么使用环境变量:
• 安全性:避免将敏感信息(API Key)硬编码在代码中
• 灵活性:可以在不同环境中使用不同的配置
• **实践:符合安全编码规范
2. from langchain_community.chat_models import ChatTongyi
作用:导入 LangChain 社区版中的通义千问聊天模型封装
模块说明:
• langchain_community:LangChain 社区扩展包,包含第三方模型集成
• chat_models:聊天模型模块
• ChatTongyi:通义千问(阿里云)的聊天模型类
本项目中用途:创建通义千问模型实例,用于调用 API
参数说明:
• model_name:模型名称(qwen-turbo/qwen-plus/qwen-max)
• dashscope_api_key:通义千问 API 密钥
3. from langchain_core.prompts import ChatPromptTemplate
作用:导入 LangChain 核心库中的聊天提示词模板类
模块说明:
• langchain_core:LangChain 核心库,包含基础组件
• prompts:提示词模块
• ChatPromptTemplate:聊天提示词模板类
本项目中用途:创建结构化的提示词模板,支持变量替换
优势:
• 支持变量占位符 {variable}
• 类型安全,减少错误
• 易于维护和复用
4. from langchain_core.output_parsers import StrOutputParser
作用:导入 LangChain 核心库中的字符串输出解析器
模块说明:
• langchain_core:LangChain 核心库
• output_parsers:输出解析器模块
• StrOutputParser:字符串输出解析器
本项目中用途:将模型输出解析为纯文本字符串
parser = StrOutputParser()
result = parser.parse(model_output)
或者在链中使用
chain = prompt | llm | StrOutputParser()
result = chain.invoke({“variable”: “value”})
为什么需要解析器:
• 模型输出通常是结构化对象(如 AIMessage)
• 解析器将其转换为可用的格式(如字符串)
• 支持链式调用,简化代码
5. import dashscope
作用:导入阿里云 DashScope SDK
模块说明:
• dashscope:阿里云 DashScope(通义千问)官方 Python SDK
• 提供对通义千问 API 的直接访问
本项目中用途:设置全局 API Key,供 ChatTongyi 使用
为什么需要:
• ChatTongyi 底层依赖 dashscope SDK
• 设置全局 API Key 后,所有调用都会自动使用
• 避免在每个调用中重复传递 API Key
os (标准库)
└── 获取环境变量中的 API Key
dashscope (第三方 SDK)
└── 设置全局 API Key
langchain_community (LangChain 社区版)
└── ChatTongyi (通义千问模型封装)
└── 依赖 dashscope.api_key
langchain_core (LangChain 核心库)
├── ChatPromptTemplate (提示词模板)
└── StrOutputParser (输出解析器)
└── 解析模型输出为字符串
LangChain 支持多种大语言模型,不同的模型提供商有不同的调用方式。本节对比通义千问(阿里云)和 OpenAI 的调用方式。
Import 语句
API Key 设置
import os
import dashscope
api_key = os.environ.get(‘DASHSCOPE_API_KEY’)
dashscope.api_key = api_key模型初始化 llm = ChatTongyi(
model_name=“qwen-turbo”,
dashscope_api_key=api_key
)
支持的模型
调用示例
messages = [(“user”, “你好”)]
response = llm.invoke(messages)
print(response.content)完整示例 from langchain_community.chat_models import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
import dashscope
api_key = os.environ.get(‘DASHSCOPE_API_KEY’)
dashscope.api_key = api_key
llm = ChatTongyi(model_name=“qwen-turbo”, dashscope_api_key=api_key)
prompt = ChatPromptTemplate.from_template(“请回答:{question}”)
chain = prompt | llm | StrOutputParser()
result = chain.invoke({“question”: “你好”})
print(result)
Import 语句 from langchain_openai import ChatOpenAI API Key 设置 import os
api_key = os.environ.get(‘OPENAI_API_KEY’)
或者直接设置
api_key = “sk-your-api-key-here”模型初始化
llm = ChatOpenAI(
model=“gpt-3.5-turbo”,
api_key=api_key,
temperature=0.7
)
支持的模型
调用示例
messages = [(“user”, “Hello”)]
response = llm.invoke(messages)
print(response.content)完整示例 from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
api_key = os.environ.get(‘OPENAI_API_KEY’)
llm = ChatOpenAI(
model=“gpt-3.5-turbo”,
api_key=api_key,
temperature=0.7
)
prompt = ChatPromptTemplate.from_template(“请回答:{question}”)
chain = prompt | llm | StrOutputParser()
result = chain.invoke({“question”: “你好”})
print(result)
方法一:条件导入
import os
根据环境变量选择模型
model_provider = os.environ.get(‘MODEL_PROVIDER’, ‘qwen’)
if model_provider == ‘qwen’:
from langchain_community.chat_models import ChatTongyi
import dashscope
api_key = os.environ.get(‘DASHSCOPE_API_KEY’)
dashscope.api_key = api_key
llm = ChatTongyi(model_name=“qwen-turbo”, dashscope_api_key=api_key)
elif model_provider == ‘openai’:
from langchain_openai import ChatOpenAI
api_key = os.environ.get(‘OPENAI_API_KEY’)
llm = ChatOpenAI(model=“gpt-3.5-turbo”, api_key=api_key)
result = llm.invoke([(“user”, “你好”)])
print(result.content)
方法二:工厂函数
def create_llm(provider: str = “qwen”):
”““创建大语言模型实例”“”
import os
if provider == “qwen”:
from langchain_community.chat_models import ChatTongyi
import dashscope
api_key = os.environ.get(‘DASHSCOPE_API_KEY’)
dashscope.api_key = api_key
return ChatTongyi(model_name=“qwen-turbo”, dashscope_api_key=api_key)
elif provider == “openai”:
from langchain_openai import ChatOpenAI
api_key = os.environ.get(‘OPENAI_API_KEY’)
return ChatOpenAI(model=“gpt-3.5-turbo”, api_key=api_key)
else:
raise ValueError(f”不支持的模型提供商: {provider}“)
使用
llm = create_llm(“qwen”) # 或 “openai”
result = llm.invoke([(“user”, “你好”)])
print(result.content)
通义千问依赖
pip install langchain langchain-community dashscope
OpenAI 依赖
pip install langchain langchain-openai openai
通用依赖(两者都需要)
pip install langchain langchain-core
选择通义千问的场景
主要使用中文
在国内环境,需要快速访问
成本敏感,希望降低 API 调用费用
需要符合国内数据合规要求
选择 OpenAI 的场景
需要最先进的模型性能
主要使用英文
需要使用 OpenAI 的特定功能(如 GPT-4 的多模态)
项目已经使用 OpenAI 生态
• 三个通用函数:提供不同层次的模型调用接口
• 简单易用:封装复杂细节,提供简洁的 API
• 灵活配置:支持多种模型和参数配置
• 丰富示例:包含 10 个实际应用示例
• 错误处理:内置异常处理机制
功能:最简单的模型调用函数,直接传入文本返回结果
参数:
• prompt_text (str): 输入的提示文本
• model_name (str): 模型名称,默认为 “qwen-turbo”
返回:str - 模型生成的文本响应
支持的模型:
• qwen-turbo - 快速响应,适合简单任务
• qwen-plus - 平衡性能和速度
• qwen-max - 最强性能,适合复杂任务
功能:带系统提示词的模型调用,可以设定 AI 的角色和任务
参数:
• user_text (str): 用户输入的文本
• system_prompt (str): 系统提示词,用于设定角色和任务
• model_name (str): 模型名称,默认为 “qwen-turbo”
返回:str - 模型生成的文本响应
适用场景:角色扮演、专业问答、特定风格生成
功能:使用模板的模型调用,支持变量替换
参数:
• template_str (str): 模板字符串,使用 {variable} 作为占位符
• kwargs: 模板变量的键值对
返回:str - 模型生成的文本响应
适用场景:批量生成、格式化输出、动态提示词
result = call_qwen_with_template(
“请用{style}的风格写一首关于{topic}的诗”,
style=“浪漫”,
topic=“春天”
)
print(result)
# 安装依赖
pip install langchain langchain-community dashscope
设置环境变量
export DASHSCOPE_API_KEY=“your_api_key_here”
# 运行主程序
python 0-hello_world_qwen.py
from 0-hello_world_qwen import call_qwen_model
简单调用
result = call_qwen_model(“你好”)
print(result)
使用不同模型
result = call_qwen_model(“你好”, model_name=“qwen-plus”)
print(result)
选择建议
• 快速测试:使用 call_qwen_model
• 需要特定角色:使用 call_qwen_with_system_prompt
• 需要格式化输出:使用 call_qwen_with_template
• ChatTongyi:通义千问聊天模型封装
• ChatPromptTemplate:提示词模板
• StrOutputParser:字符串输出解析器
# LangChain 消息格式
messages = [
(“system”, “系统提示词”),
(“user”, “用户输入”)
]
# 使用 | 操作符进行链式调用
chain = prompt | llm | StrOutputParser()
result = chain.invoke({“variable”: “value”})
注意事项
1. API Key 安全:不要将 API Key 硬编码在代码中
2. 错误处理:代码已包含基本的异常处理
3. 模型选择:根据任务复杂度选择合适的模型
4. 成本控制:注意 API 调用次数和费用
5. 网络连接:确保网络连接正常
如何扩展功能
1. 添加记忆功能:实现多轮对话记忆
2. 添加流式输出:实现实时输出效果
3. 添加参数验证:增强输入参数的验证
4. 添加日志记录:记录 API 调用历史
5. 添加缓存机制:缓存常见问题的答案
这个 Hello World 示例展示了 LangChain 与通义千问 API 的基本使用方法。通过三个通用函数,你可以快速实现文本生成、问答、角色扮演等功能。示例代码结构清晰,易于理解和扩展,是学习 LangChain 的绝佳起点。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/256278.html