前言
注:langchain-wenxin (https://github.com/ninehills/langchain-wenxin)这个项⽬不再维护,因为langchain 已经⽀持了。
langchain 官⽹:https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint
代码语言:javascript复制pip3 install langchain
pip3 install qianfan
在qianfan⼤模型平台上创建应⽤后会看到api key, securet key
https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application
Chat 对话
1) 使⽤默认模型
代码语言:javascript复制import qianfan
chat_comp = qianfan.ChatCompletion(ak="***", sk="***")
# 调⽤默认模型,即 ERNIE-Bot-turbo
resp = chat_comp.do(messages=[{
"role": "user",
"content": "你好"
}])
print(resp['body']['result'])
你好,有什么我可以帮助你的吗?
2)使用指定模型
代码语言:javascript复制resp = chat_comp.do(model="ERNIE-Bot", messages=[{
"role": "user",
"content": "你好"
}])
你好!有什么我可以帮助你的吗?请随时告诉我你的问题和需求,我会尽⼒为你提供帮助。
3)指定自行发布的模型
代码语言:javascript复制# 指定⾃⾏发布的模型
resp = chat_comp.do(endpoint="your_custom_endpoint", messages=[{
"role": "user",
"content": "你好"
}])
4)内置多轮对话
可以利用内置 Messages 简化多轮对话。下面是⼀个简单的⽤户对话案例,实现了对话内容的记录。
代码语言:javascript复制msgs = qianfan.Messages()
while True:
msgs.append(input()) # 增加⽤户输⼊
resp = chat_comp.do(messages=msgs)
print(resp['body']['result']) # 打印输出
msgs.append(resp) # 增加模型输出
Completion 续写
对于不需要对话,仅需要根据 prompt 进⾏补全的场景来说,用户可以使用 qianfan.Completion来完成这⼀任务。
代码语言:javascript复制import qianfan
comp = qianfan.Completion(ak="...", sk="...")
resp = comp.do(model="ERNIE-Bot", prompt="你好")
# 输出:你好!有什么我可以帮助你的吗?# 续写功能同样⽀持流式调⽤
resp = comp.do(model="ERNIE-Bot", prompt="你好", stream=True)
for r in resp:
print(r['result'])
# 异步调⽤
resp = await comp.ado(model="ERNIE-Bot-turbo", prompt="你好")
print(resp['body']['result'])
# 异步流式调⽤
resp = await comp.ado(model="ERNIE-Bot-turbo", prompt="你好", stream=True)
async for r in resp:
print(r['result'])
# 调⽤⾮平台内置的模型
resp = comp.do(endpoint="your_custom_endpoint", prompt="你好")
Embedding 向量化
千帆SDK 同样⽀持调⽤千帆⼤模型平台中的模型,将输⼊⽂本转化为⽤浮点数表示的向量形式。转化得到的语义向量可应⽤于⽂本检索、信息推荐、知识挖掘等场景。
代码语言:javascript复制# Embedding 基础功能
import qianfan
emb = qianfan.Embedding(ak="...", sk="...")
resp = emb.do(model="Embedding-V1", texts=["世界上最⾼的⼭"])
print(resp['data'][0]['embedding'])
# 输出:0.062249645590782166, 0.05107472464442253, 0.033479999750852585, ...]
# 异步调⽤
resp = await emb.ado(texts=[
"世界上最⾼的⼭"
])
print(resp['data'][0]['embedding'])
# 使⽤⾮预置模型
resp = emb.do(endpoint="your_custom_endpoint", texts=[
"世界上最⾼的⼭"
])
对于向量化任务,⽬前千帆⼤模型平台预置的模型有:
- Embedding-V1(默认)
- bge-large-en
- bge-large-zh
Plugin 插件调⽤
后续是否改成appBuilder,不再使⽤插件?
千帆⼤模型平台⽀持使⽤平台插件并进⾏编排,以帮助⽤户快速构建 LLM 应⽤或将 LLM 应⽤到⾃建程序中。在使⽤这⼀功能前需要先创建应⽤、设定服务地址、将服务地址作为参数传⼊千帆 SDK。
代码语言:javascript复制# Plugin 基础功能展示
plugin = qianfan.Plugin()
resp = plugin.do(endpoint="your_custom_endpoint", prompt="你好")
print(resp['result'])
# 流式调⽤
resp = plugin.do(endpoint="your_custom_endpoint", prompt="你好", stream=True)
# 异步调⽤
resp = await plugin.ado(endpoint="your_custom_endpoint", prompt="你好")
print(resp['result'])
# 异步流式调⽤
resp = await plugin.ado(endpoint="your_custom_endpoint", prompt="你好", stream=True)
async for r in resp:
print(r)