如何调用百度文心一言API实现智能问答

诸神缄默不语-个人CSDN博文目录

百度需要先认证个人信息才能使用LLM API。

文章目录

  • [1. 获得 API Key](#1. 获得 API Key)
  • [2. 撰写代码并实现提问和回答](#2. 撰写代码并实现提问和回答)
    • [2.1 用openai包实现调用](#2.1 用openai包实现调用)
    • [2.2 用openai包实现流式调用](#2.2 用openai包实现流式调用)
    • [2.3 用openai包实现工具调用](#2.3 用openai包实现工具调用)
    • [2.4 构建智能体](#2.4 构建智能体)
    • [2.5 文生图](#2.5 文生图)
    • [2.6 图生图](#2.6 图生图)
  • [3. 用gradio建立大模型问答网站](#3. 用gradio建立大模型问答网站)
    • [3.1 gradio原生UI](#3.1 gradio原生UI)
    • [3.2 文心一言风格UI](#3.2 文心一言风格UI)
    • [3.3 gradio其他介绍](#3.3 gradio其他介绍)
  • [4. 参数介绍](#4. 参数介绍)
  • [5. 本文撰写过程中参考的网络资料](#5. 本文撰写过程中参考的网络资料)

1. 获得 API Key

https://aistudio.baidu.com/account/accessToken

点击复制即可。

2. 撰写代码并实现提问和回答

2.1 用openai包实现调用

python 复制代码
import openai
import backoff

client = openai.OpenAI(
    api_key=OPENAI_API_KEY,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3"
)

LLM_MODEL="ernie-3.5-8k"

@backoff.on_exception(backoff.expo, (openai.RateLimitError, openai.APITimeoutError))
def llm_check_search(query, msg_history=None, llm_model=LLM_MODEL):
    msg_history = msg_history or []
    new_msg_history = msg_history + [{"role": "user", "content": query}]
    response = client.chat.completions.create(
        model=llm_model,
        messages=[*new_msg_history],
        max_tokens=30
    ).choices[0].message.content
    
    # 返回 LLM 的响应
    return response

print(llm_check_search("你是谁?"))

输出:

复制代码
我是文心一言,百度研发的知识增强大语言模型。我能够回答各种问题,提供相关的知识和信息,并且可以进行文本创 
作和知识推理等多种任务。如果您有任何问题或需要帮助,请随时告诉我。

2.2 用openai包实现流式调用

流式调用就是大模型每次生成一点就返回一点,用户在前端可以更快地看到前半部分内容:

python 复制代码
import openai
import backoff

client = openai.OpenAI(
    api_key=OPENAI_API_KEY,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3"
)

LLM_MODEL="ernie-3.5-8k"

@backoff.on_exception(backoff.expo, (openai.RateLimitError, openai.APITimeoutError))
def llm_check_search(query, msg_history=None, llm_model=LLM_MODEL):
    msg_history = msg_history or []
    new_msg_history = msg_history + [{"role": "user", "content": query}]
    response = client.chat.completions.create(
        model=llm_model,
        messages=[*new_msg_history],
        max_tokens=30,
        stream=True
    )

    for chunk in response:
        chunk_content = chunk.choices[0].delta.content
        if chunk_content:
            print(chunk_content)

llm_check_search("你是谁?")

输出:

复制代码
我是百度
公司研发
的知识增强
大语言
模型,
我的中文名
是文心
一言,
英文名是
ERNIE
 Bot。
我可以完成的任务
包括知识
问答,
文本创作
,知识
推理,
数学计算
,代码
理解与编写
,作画
,翻译
等。
如果您有任何
问题,
请随时
向我提问
。

2.3 用openai包实现工具调用

create()方法中加入tools参数,描述一系列可用的函数。

parameters的值是一个Json Schema。

Object 的字字段用properties描述,array子字段类型

用items描述,可以相互嵌套定义。这样就可以描述任意复杂的Json规范了。

示例入参:{"location": ["北京", "天津"], "date": "2024-01-01"}

tool_choice入参:默认是auto,标识模型自己选择是否使用工具。

None代表不使用工具,Required代表强制使用指定的工具。

2.4 构建智能体

2.5 文生图

2.6 图生图

3. 用gradio建立大模型问答网站

我没有专门写一篇介绍gradio的文章,就直接拿这篇博文作为简单示例性教程了。

我看这个模块还挺好使的。

3.1 gradio原生UI

假设本文2.1节的代码写在try_wenxinyiyan1.py中,我们在同目录下新建一个Python文件写如下代码:

python 复制代码
import gradio as gr
from try_wenxinyiyan1 import llm_check_search

demo = gr.Interface(
    fn=llm_check_search,
    inputs=["text"],
    outputs=["text"],
)

demo.launch()

运行后打开给出的网址(http://127.0.0.1:7860)效果如图所示:

3.2 文心一言风格UI

python 复制代码
import gradio as gr
from try_wenxinyiyan1 import llm_check_search

# 修改自定义 CSS
custom_css = """
body {
    background-color: #f0f8ff;  /* 淡蓝色背景 */
}
.container {max-width: 730px; margin: auto; padding-top: 0;}
.title-container {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    margin-top: 5rem;
    margin-bottom: 2rem;
}
.main-title {
    font-size: 2.5em;
    font-weight: bold;
    color: #1e90ff;  /* 深蓝色标题 */
    display: flex;
    align-items: center;
    justify-content: center;
}
.main-title img {
    width: 40px;
    height: 40px;
    margin-right: 10px;
    filter: invert(39%) sepia(95%) saturate(1095%) hue-rotate(194deg) brightness(103%) contrast(101%);  /* 将图标改为蓝色 */
}
.powered-by {
    font-size: 0.8em;
    color: #4682b4;  /* 钢蓝色 */
    margin-top: 0.5rem;
}
#component-1 {
    border: none !important;
    box-shadow: none !important;
    background: none !important;
}
#component-1 .form {
    border: 1px solid #87cefa;  /* 淡蓝色边框 */
    border-radius: 4px;
    padding: 10px;
    background-color: white;
}
.button-container {
    display: flex;
    flex-direction: column;
    align-items: center;
}
.search-button.primary {
    min-width: 120px !important;
    justify-content: center !important;
    background-color: #1e90ff !important;  /* 深蓝色按钮 */
    color: white !important;
    border: none !important;
}
.search-button.primary:hover {
    background-color: #4169e1 !important;  /* 悬停时稍深的蓝色 */
}
.search-button.primary span {
    margin: 0 auto !important;
}
"""

# 修改自定义 HTML 标题
custom_title = """
<div class="title-container">
    <div class="main-title">
        <img src="https://img.icons8.com/ios-filled/50/000000/search--v1.png" alt="Search Icon"/>
        <span>AI问答机</span>
    </div>
    <div class="powered-by">Powered by 文心大模型</div>
</div>
"""

with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as iface:
    gr.HTML(custom_title)
    with gr.Column(elem_classes="container"):
        query_input = gr.Textbox(
            lines=1,
            placeholder="想对文心一言问什么?",
            label=None,
            container=False,
        )

        gr.Examples(
            examples=[["火鸡好吃吗?"], ["感恩节的来源是什么?"], ["哲学专业学什么?"]],
            inputs=query_input,
        )

        with gr.Column(elem_classes="button-container"):
            submit_button = gr.Button("搜索一下", elem_classes="search-button primary")
        output = gr.Markdown()

    submit_button.click(fn=llm_check_search, inputs=query_input, outputs=output)

if __name__ == "__main__":
    iface.launch()

效果:

3.3 gradio其他介绍

  1. flag按钮是用来保存输入输出信息到本地的
  2. launch()函数中设置参数share=True就可以公开分享链接

4. 参数介绍

  1. messages
    1. role:system / user / assistant / tool
    2. content
    3. tool_calls(assistant信息调用工具时放置工具信息)
    4. tool_call_id(tool信息中对应assistant信息中tool_calls值的id键的值)

5. 本文撰写过程中参考的网络资料

  1. 文心一言官方课程"乘风季·开发者进阶计划训练营课程"
相关推荐
ManageEngineITSM7 分钟前
IT服务台为什么越忙越低效?
人工智能·自动化·excel·itsm·工单系统
程砚成8 分钟前
小微美业的数字化突围:一款轻量工具,如何让小店告别经营焦虑?
人工智能
IT_陈寒9 分钟前
为什么我的Vite热更新老是重新加载整个页面?
前端·人工智能·后端
zhaoshuzhaoshu30 分钟前
人工智能(AI)发展史:详细里程碑
人工智能·职场和发展
Luke~31 分钟前
阿里云计算巢已上架!3分钟部署 Loki AI 事故分析引擎,SRE 复盘时间直接砍掉 80%
人工智能·阿里云·云计算·loki·devops·aiops·sre
weixin_1562415757631 分钟前
基于YOLOv8深度学习花卉识别系统摄像头实时图片文件夹多图片等另有其他的识别系统可二开
大数据·人工智能·python·深度学习·yolo
QQ6765800837 分钟前
AI赋能轨道交通智能巡检 轨道交通故障检测 轨道缺陷断裂检测 轨道裂纹识别 鱼尾板故障识别 轨道巡检缺陷数据集深度学习yolo第10303期
人工智能·深度学习·yolo·智能巡检·轨道交通故障检测·鱼尾板故障识别·轨道缺陷断裂检测
小陈工39 分钟前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python
tq108639 分钟前
组织的本质:从科层制到伴星系统的决断理论
人工智能
科技与数码43 分钟前
互联网保险迎来新篇章,元保方锐分享行业发展前沿洞察
大数据·人工智能