最近刚刚着手学习LangChain,学习了部分原理,参考上一篇文章
在刚刚准备上手实践就遇到了问题。由于国内限制,在我的本地调用Google和OpenAI的API一直不通。于是想起了硅基流动平台上的诸多模型,但中途一直提示我的token无效,无奈只能参考其他人的博客,终于找到了对应的方法。
一、硅基流动(SiliconFlow)
siliconflow 集合了顶尖大模型, 致力于为开发者提供更快、更全面、体验更丝滑的模型 API,助力开发者和企业聚焦产品创新,无须担心产品大规模推广所带来的高昂算力成本。
1、关于模型
注册并登录硅基流动后,会有部分赠送金额,可用于体验付费模型。
具体每个模型的计费可在模型广场内点击查看,如图所示
2、创建API密钥
在左侧点击API密钥,点击新建API密钥
如图所示的密钥描述可随便自定义,该密钥权限拥有账户的完整权限,注意不要泄露。
创建完成后,点击密钥即可复制;或者点击右侧的复制图标
二、使用LangChain进行连接
1、选择模型
可选择免费的模型进行代码调试,避免浪费调用次数。
打开模型筛选器,选择只看免费,随机挑选一个模型即可
2、查看URL
点击模型,查看API文档
在如下图位置可找到url
3、代码
3.1 将API密钥配置为环境变量(可选)
该步骤可选,不配置变量可在初始化模型时直接传入
import os
os.environ['siliconFlow'] = "your siliconFlow API Key"
3.2 初始化Chat模型
次数的openai_api_base的值为上面介绍的url,但不为同一层级
使用上述完整的url会提示页面不存在或无效令牌
模型这里选用了免费的Qwen/Qwen3-8B进行调试
llm = ChatOpenAI(
openai_api_base = "https://api.siliconflow.cn/v1/",
openai_api_key = os.environ['siliconflow'],
model_name = "Qwen/Qwen3-8B", # 模型名称
)
3.3 Prompt
prompt的配置有不同的方式,但整体含义基本相同
3.3.1 langchain_core.messages
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="把这段话从中文翻译成英语"),
HumanMessage(content="你好,我正在学习langchain,请问有什么推荐")
]
3.3.2 langchain_core.prompts
langchain_core.prompts 的参数有两种不同形式
Instantiation from a list of message templates:
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
HumanMessage("你好,我正在学习langchain,请问有什么推荐")
])
Instantiation from mixed message formats:
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
("uers", "你好,我正在学习langchain,请问有什么推荐")
])
以format形式传入
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
("user", "{input}")
])
chain.invoke({"input": "你好,我正在学习langchain,请问有什么推荐"})
3.4 输出解析(StrOutputParser)
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
3.5 组合可执行的链
使用 LCEL 的管道操作符(|)
chain = prompt|llm|output_parser
3.6 chain.invoke({})
如果 ChatPromptTemplate 中有 {input} 类似的占位符,可在chain.invoke时传入
prompt = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
("user", "{input}")
])
# 。。。 中间代码部分省略
chain.invoke({"input": "你好,我正在学习langchain,请问有什么推荐"})
如果 ChatPromptTemplate 中没有 {input} 类似的占位符,需要在chain.invoke时传入空字典
prompt = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
("user", "你好,我正在学习langchain框架,请问有什么推荐")
])
# 。。。 中间代码部分省略
chain.invoke({})
三、完整代码
import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
os.environ['siliconflow'] = 'your siliconFlow API Key'
llm = ChatOpenAI(
openai_api_base = "https://api.siliconflow.cn/v1/",
openai_api_key = os.environ['siliconflow'],
model_name = "Qwen/Qwen3-8B", # 模型名称
)
output_parser = StrOutputParser()
# prompt 无format标识
prompt = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
("user", "你好,我正在学习langchain,请问有什么推荐")
])
chain = prompt | llm | output_parser
chain.invoke({})
# Hello, I'm currently learning LangChain. Do you have any recommendations?
# prompt 有format标识
prompt1 = ChatPromptTemplate.from_messages([
SystemMessage("把这段话从中文翻译成英语"),
("user", "{input}")
])
chain1 = prompt1 | llm | output_parser
chain1.invoke({"input": "你好,我正在学习langchain,请问有什么推荐"})
# Hello, I'm currently learning LangChain. Do you have any recommendations?
# 使用messages
messages = [
SystemMessage(content="把这段话从中文翻译成英语"),
HumanMessage(content="你好,我正在学习langchain,请问有什么推荐")
]
llm.invoke(messages)
# content="\n\nHello, I'm currently studying LangChain. Could you recommend any resources or learning methods?" additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 555, 'prompt_tokens': 32, 'total_tokens': 587, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 536, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': None}, 'model_name': 'Qwen/Qwen3-8B', 'system_fingerprint': '', 'id': '0197e954b3731c988de0e0ae8c31c8de', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None} id='run--40e30cae-d9f9-4da6-8a3a-2efe09fc3ded-0' usage_metadata={'input_tokens': 32, 'output_tokens': 555, 'total_tokens': 587, 'input_token_details': {}, 'output_token_details': {'reasoning': 536}}
如上就是关于如何使用langchain连接硅基流动(siliconFlow),希望可以帮助各位更好的理解和构建简单的LLM链。