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"}}
))

 

 

posted @   三只松鼠  阅读(142)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示