打造企业专属人工智能助理

简介: 此章节介绍如何构建具备理解和执行能力的企业级AI助理。不仅需理解自然语言,还需执行具体任务,超越传统问答机器人的范畴。应用场景广泛,如智能天气查询、提交BUG等。实现方法包括使用OpenAI的Assistant服务及LangChain框架。前者简便但成本较高,后者更灵活多变。示例代码展示了如何利用OpenAI API让AI助理创造笑话并通过邮件发送,涉及助手创建、线程管理及工具调用等步骤。

6e6dd611edfa13f9da7b741115c82a4.jpg

简介

而在前面介绍React 推理提示的时候讲到了,目前的大语言模型本身不具备任何的执行能力,只具备理解自然语言的能力。

而如果要打造企业专属的人工智能助理,这个助理除了要具备“听懂人话的能力”,还需要具备执行动作的能力。要不然和问答机器人就没有任何区别了。所以本章节要完成的一个实践示例,就是让大模型具备“听懂人话”+“执行动作”的能力。

应用场景

智能助理由于具备“听懂人话”+“执行动作”的能力,所以其可拓展性是非常强的。理论上来说,所有的操作都能通过智能助理实现。比如如下几个场景。

  1. 智能查天气助理。
  2. 智能提 bug 助理。
  3. 其他操作场景。

只是越复杂的应用场景,中间牵涉到的工具和执行步骤也就越多越复杂。

实践演练

那么如果要实现打造企业专属人工智能助理,其实也是有多种方式的:

  1. openai 官方提供的 assistant。
  2. 人工智能应用框架,比如 LangChain。

assistant 目前相比于 LangChain。因为和 ChatGPT 强绑定,所以自然有一定的局限性。但是优点就是非常的简单且容易上手,如果可以接受 token 比较昂贵的消费。那么使用 assistant 也是一个非常好的选择。

而 LangChain 其灵活性则更强,会在后面的章节进行进一步的介绍。

使用官方的 assistant

点击查看官方 assistant 使用教程

假设我们现在的需求,是要让人工智能助理编造一条笑话,并且使用邮箱进行发送,那么整体流程应该如下:

image.png

对应代码:

import json
import os
import time

import requests
from openai import OpenAI

client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# 一个发送邮件的函数工具
def send_email(quote, recipient="霍格沃兹测试开发学社@email.com"):
    # Print the quote and recipient for debugging purposes
    print(f"生成消息:\n {quote}\n\n发送邮件给: {recipient}")
    # Return a success message
    return "发送邮件给" + recipient
# 工具的提示词。为了让大模型更好理解工作的作用。
tools = [{
   
   
    "type": "function",
    "function": {
   
   
        "name": "send_email",
        "description": "Sends a quote via email",
        "parameters": {
   
   
            "type": "object",
            "properties": {
   
   
                "quote": {
   
   
                    "type": "string",
                    "description": "A generated funny quote"
                }
            },
            "required": [
                "quote"
            ]
        }
    }
}]
# 1. 创建助手
assistant = client.beta.assistants.create(
    name="Wise Guy",
    instructions="你是一位聪明的哲学家,会产生有趣的引言。",
    model="gpt-3.5-turbo-1106",
    tools=tools
)
# 2. 创建线程
thread = client.beta.threads.create()
# 3. 传入 prompt 并执行线程
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="创建一个笑话并且使用邮件发送",
)
# 4. 执行消息
run_res = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=assistant.id, )
# 5. 等待回复
def wait_on_run(run):
    while run.status == "queued" or run.status == "in_progress":
        run = client.beta.threads.runs.retrieve(
            thread_id=thread.id,
            run_id=run.id,
        )
        print(f"执行的状态为:{run.status}")
        time.sleep(0.5)
    return run
# 6. 获取回复的结果
run_res = wait_on_run(run_res)
# 7. 如果回复的结果需要调用工具
if run_res.status == "requires_action":
    # 提交工具的返回信息
    tool_call = run_res.required_action.submit_tool_outputs.tool_calls[0]
    name = tool_call.function.name
    arguments = json.loads(tool_call.function.arguments)
    print("等待返回的参数:", name)
    print(f"函数参数为:{arguments}")
    # 调用发送邮件工具
    task = send_email(**arguments)
    # 提交工具执行后的结果信息。
    run = client.beta.threads.runs.submit_tool_outputs(
        thread_id=thread.id,
        run_id=run_res.id,
        tool_outputs=[
            {
   
   
                "tool_call_id": tool_call.id,
                "output": "done",
            }
        ],
    )
    print("==========调用 chatgpt 执行内容")
    run = wait_on_run(run)
    print("==========获取返回信息")
    print(client.beta.threads.messages.list(thread_id=thread.id, order="asc").model_dump_json(indent=2))

其他方式

  1. 结合 LangChain 等人工智能应用框架完成。

总结

  1. 企业专属人工智能助理的产品需求。
  2. 企业专属人工智能助理的实现方案。
  3. 使用官方 assistant 实现企业专属人工智能助理。
相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
机器学习/深度学习 存储 监控
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
|
7月前
|
缓存 安全 测试技术
GO项目开发规范文档解读
本篇博客的目的,更多是为快速翻阅与回忆使用。
337 1
|
6月前
|
缓存 前端开发 定位技术
Flutter for OpenHarmony 实战之基础组件:第三篇 Stack 层叠布局详解
本文详解 Flutter for OpenHarmony 中 Stack 层叠布局:涵盖 Z 轴堆叠原理、Alignment 对齐与 Positioned 精准定位,实战 Badge 角标、新闻 Banner 及 IndexedStack 页面状态保持,助你高效构建跨端复杂 UI。(239字)
673 1
Flutter for OpenHarmony 实战之基础组件:第三篇 Stack 层叠布局详解
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
存储 监控 调度
阿里云对象存储OSS之间进行数据转移教程
讲解如何在阿里云对象存储OSS之间进行跨账号、跨地域、以及同地域内的数据迁移,包括数据迁移之前的准备工作和实施数据迁移以及一些后续操作
|
10月前
|
SQL XML 安全
自定义SQL
利用MyBatisPlus的Wrapper构建动态查询条件,结合自定义SQL实现灵活更新。例如,扣减指定ID用户的余额:通过LambdaQueryWrapper构造id in (1,2,4)条件,Mapper中使用@Param("ew")传入wrapper,在XML或注解SQL中通过${ew.customSqlSegment}注入条件片段,实现SQL拼接,兼顾安全与灵活性。(239字)
|
数据采集 弹性计算 供应链
阿里云服务器包年包月、按量付费和抢占式实例有什么区别?如何选择?
阿里云服务器提供包年包月、按量付费和抢占式实例三种付费模式。包年包月预付费,长期使用更划算,适合稳定业务;按量付费按小时计费,灵活但成本较高,适合短期或波动场景;抢占式实例价格优惠最高达90%,但可能被释放,适合无状态应用。根据需求选择可兼顾成本与稳定性。
|
机器学习/深度学习 存储 监控
揭秘微调‘失忆’之谜:如何运用低秩适应与多任务学习等策略,快速破解灾难性遗忘难题?
【10月更文挑战第13天】本文介绍了几种有效解决微调灾难性遗忘问题的方法,包括低秩适应(LoRA)、持续学习和增量学习策略、记忆增强方法、多任务学习框架、正则化技术和适时停止训练。通过示例代码和具体策略,帮助读者优化微调过程,提高模型的稳定性和效能。
1081 5