python 调用千帆大模型
一、前言
目前千帆有3个免费的大模型,想白嫖的可以试用一下,若想要有好的性能和模型效果,需要开通付费。注意 Prompt模板、Fuyu-8B 并非 AI 对话模型,我们下面使用 Yi-34B-Chat 模型调试代码。
二、安装qianfan
pip install qianfan
三、获取千帆API Key、Secret Key
1、登录千帆大模型平台
2、创建一个应用
3、获取应用的 API Key 和 Secret Key(千帆官网推荐安全认证的 Access Key 和 Secret Key,这个下面会讲到)。
四、简单的大模型对话
1、找到安全认证页面的Access Key 和 Secret Key
2、一个简单的示例
import os
import qianfan
from pprint import pprint
#【推荐】使用安全认证AK/SK鉴权,通过环境变量初始化认证信息
# 替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"
chat_comp = qianfan.ChatCompletion()
# 指定特定模型
resp = chat_comp.do(model="Yi-34B-Chat", messages=[{
"role": "user",
"content": "推荐一下苏州旅游景点"
}])
pprint(resp["body"])
3、如果想要像文心一言一样一个字或一段文字连续的吐出来,可以使用流式输出:
resp = chat_comp.do(model="Yi-34B-Chat",stream=True,top_p=0.8, temperature=0.9, penalty_score=1.0, messages=[{
"role": "user",
"content": "推荐一下苏州旅游景点"
}])
for i in resp:
print(i["body"])
参数含义:
stream:流式输出
temperature:从生成模型中抽样包含随机性,因此每次点击“生成”时,相同的提示可能会产生不同的输出。温度是用于调整随机程度的数字(0~1),数字越大,随机性越高
top_p:目的是限制可能被采样的低概率 token 的长尾,通常设置为较高的值(如 0.75)
4、多轮对话
import os
import qianfan
from pprint import pprint
#【推荐】使用安全认证AK/SK鉴权,通过环境变量初始化认证信息
# 替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "Key替换your_iam_sk"
# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"
chat_comp = qianfan.ChatCompletion()
# 指定特定模型
resp = chat_comp.do(model="Yi-34B-Chat",stream=False, temperature=0.9, messages=[
{
"role": "user",
"content": "推荐一下苏州旅游景点"
},
{
"role": "assistant",
"content": "苏州是中国江苏省的一个历史悠久的城市,以其古典园林、水乡风光和丰富的文化遗产而闻名。"
},
{
"role": "user",
"content": "我想了解苏州的拙政园"
},
])
pprint(resp['body'])
五、LangChain调用千帆大模型
LangChain就是一个 LLM 编程框架,你想开发一个基于 LLM 应用,需要什么组件它都有,直接使用就行;甚至针对常规的应用流程,它利用链(LangChain中Chain的由来)这个概念已经内置标准化方案了。
1、安装langchain,目前最新版是0.3.4,和0.1.0写法不同了。
pip install langchain langchain-community
2、简单的大模型对话
import os
from langchain_community.llms import QianfanLLMEndpoint
#方式一:【推荐】使用安全认证AK/SK鉴权,通过环境变量初始化认证信息
# 替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"
llm = QianfanLLMEndpoint(model='Yi-34B-Chat',streaming=True)
res = llm.invoke("推荐一下苏州旅游景点")
print(res)
3、流式输出:
llm = QianfanLLMEndpoint(model='Yi-34B-Chat',streaming=True)
for chunk in llm.stream("推荐一下苏州旅游景点"):
print(chunk)
也支持模型参数:
temperature:从生成模型中抽样包含随机性,因此每次点击“生成”时,相同的提示可能会产生不同的输出。温度是用于调整随机程度的数字(0~1),数字越大,随机性越高
top_p:目的是限制可能被采样的低概率 token 的长尾,通常设置为较高的值(如 0.75)
llm = QianfanLLMEndpoint(model='Yi-34B-Chat',streaming=True,top_p=0.8, temperature=0.9)
4、提示词模版(PromptTemplate):
通常应用程序在调用LLM时,不会把用户输入直接发给LLM,而是构造一个提示符发送给LLM。
from langchain_core.prompts import ChatPromptTemplate
llm = QianfanLLMEndpoint(model='Yi-34B-Chat',streaming=True,top_p=0.8, temperature=0.9)
prompt = ChatPromptTemplate.from_messages(
[
("user", "我想去{city}旅游,有什么推荐的景点吗?")
]
)
chat = prompt | llm
for chunk in chat.stream({"city":"苏州"}):
print(chunk)
5、使用 RunnableWithMessageHistory 记住过去的用户输入和模型输出
完整代码:
import os
from langchain_community.llms import QianfanLLMEndpoint
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder
from langchain_core.chat_history import BaseChatMessageHistory
from pydantic import BaseModel,Field
from typing import List
from langchain_core.messages import BaseMessage
#【推荐】使用安全认证AK/SK鉴权,通过环境变量初始化认证信息
# 替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_ak"
# 方式二:【不推荐】使用应用AK/SK鉴权
# 替换下列示例中参数,将应用API_Key、应用Secret key值替换为真实值
#os.environ["QIANFAN_AK"] = "应用API_Key"
#os.environ["QIANFAN_SK"] = "应用Secret_Key"
class InMemoryHistory(BaseChatMessageHistory, BaseModel):
"""In memory implementation of chat message history."""
messages: List[BaseMessage] = Field(default_factory=list)
def add_messages(self, messages: List[BaseMessage]) -> None:
"""Add a list of messages to the store"""
self.messages.extend(messages)
def clear(self) -> None:
self.messages = []
store = {}
def get_by_session_id(session_id: str) -> BaseChatMessageHistory:
if session_id not in store:
store[session_id] = InMemoryHistory()
return store[session_id]
llm = QianfanLLMEndpoint(model='Yi-34B-Chat',streaming=True,top_p=0.8, temperature=0.9)
prompt = ChatPromptTemplate.from_messages([
("system", "假设你是韩梅梅的同学 ,名字叫{name}"),
MessagesPlaceholder(variable_name="history"),
("human", "{question}"),
]
chain = prompt | llm
chain_with_history = RunnableWithMessageHistory(
chain,
# Uses the get_by_session_id function defined in the example
# above.
get_by_session_id,
input_messages_key="question",
history_messages_key="history",
)
print(chain_with_history.invoke(
{"name": "李雷", "question": "你还记得韩梅梅吗?"},
config={"configurable": {"session_id": "1"}}
))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!