langchain qianfan 使用

2024-07-05 13:03:59 浏览数 (2)

前言

注: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) 
LLM

0 人点赞