首页 > 其他分享 >基于GPT搭建私有知识库聊天机器人(五)函数调用

基于GPT搭建私有知识库聊天机器人(五)函数调用

时间:2023-07-13 17:33:09浏览次数:38  
标签:班次 name 知识库 函数调用 date GPT import

文章链接:

基于GPT搭建私有知识库聊天机器人(一)实现原理

基于GPT搭建私有知识库聊天机器人(二)环境安装

基于GPT搭建私有知识库聊天机器人(三)向量数据训练

基于GPT搭建私有知识库聊天机器人(四)问答实现


OpenAI在6月13日发布了几个重磅更新,其中包括:

  1. 开放了16k上下文的GPT-3.5-Turbo模型gpt-3.5-turbo-16k,这是目前模型容量的4倍。
  2. 发布了新的GPT-4和GPT-3.5-Turbo模型。
  3. Chat Completions API中新增了函数调用功能,使得实时获取网络数据成为可能。
  4. embeddings模型的成本降低了75%。
  5. gpt-3.5-turbo的输入token成本也降低了25%。

本文将重点介绍Chat Completions API新增的函数调用功能。

1、流程和原理

函数调用功能的流程如下:

  1. 用户发起问题。
  2. 服务端说明函数作用、参数提取规则
  3. OpenAI根据规则说明提取参数,并返回给服务端。
  4. 服务端调用本地函数获取结果。
  5. 结果返回给OpenAI。
  6. OpenAI归纳总结后生成答案并返回给用户。

通过这种方式,我们可以在聊天机器人中使用函数调用来实现更加灵活和复杂的业务功能。

2、功能演示

在这里,我们可以展示函数调用功能的一些应用场景,例如从外部API获取实时数据、执行计算任务、进行数据库操作等。这些功能可以根据具体需求进行定制,使聊天机器人能够更好地满足用户的需求。

我这里展示一个通过微信公众号查询汽车票班次的功能:

下面是日志数据:首先是从问题中提取出参数,然后调用本地接口获取班次信息,openai归纳总结后输出答案。

> Entering new  chain...

Invoking: `query_bus_by_date` with `{'drv_date': '2023-07-14', 'start_name': '成都', 'target_name': '稻城'}`


[{'boardingAddress': '', 'boardingCode': '', 'boardingName': '', 'busNo': '川A88888', 'busTypeName': '大型高一', 'childSAmount': '500', 'displayExtraFlag': '', 'drvTime': '2023-07-14 20:00', 'endName': '亚丁', 'extraFlag': '0', 'fullPrice': '0.02', 'halfPrice': '130.00', 'isForbid': '0', 'isPassStation': '1', 'isRealNameLine': '1', 'mile': '100', 'motName': 'XXXX', 'passId': '6', 'refundTimeLimit': '', 'schId': '5JhYm', 'schTypeId': '1', 'scheduleType': '1', 'seatAmount': '4998', 'seatTypeName': '', 'signId': 'v21ofWkSTmttd8mVuwxZKL5p', 'startCityName': '成都', 'startCityNo': '510100', 'startDrvTime': '', 'startStationName': '城北客运站', 'startStationNo': 'cbcz', 'stationGuidePrice': '', 'stopAddress': '', 'stopCode': '', 'stopName': '稻城', 'stopTime': '', 'targetCityName': '', 'targetCityNo': '', 'targetStationName': '', 'targetStationNo': '', 'useMinutes': ''}, {'boardingAddress': '', 'boardingCode': '', 'boardingName': '', 'busNo': '川A88888', 'busTypeName': '大型高一', 'childSAmount': '4', 'displayExtraFlag': '', 'drvTime': '2023-07-14 07:30', 'endName': '亚丁', 'extraFlag': '0', 'fullPrice': '0.02', 'halfPrice': '130.00', 'isForbid': '0', 'isPassStation': '1', 'isRealNameLine': '1', 'mile': '100', 'motName': 'XXXXX', 'passId': '6', 'refundTimeLimit': '', 'schId': 'fPDLG', 'schTypeId': '0', 'scheduleType': '1', 'seatAmount': '42', 'seatTypeName': '', 'signId': 'mVpTnMHS7i9ZEQxl9JddzkI4', 'startCityName': '成都', 'startCityNo': '510100', 'startDrvTime': '', 'startStationName': '城北客运站', 'startStationNo': 'cbcz', 'stationGuidePrice': '', 'stopAddress': '', 'stopCode': '', 'stopName': '稻城', 'stopTime': '', 'targetCityName': '', 'targetCityNo': '', 'targetStationName': '', 'targetStationNo': '', 'useMinutes': ''}]

根据查询结果,我找到了两个班次可供选择:

1. 班次号:川A88888,车型:大型高一,出发时间:2023-07-14 20:00,起点:成都城北客运站,终点:稻城亚丁。全票价格为0.02元,半票价格为130.00元。该班次由XXXX运营,共有4998个座位。

2. 班次号:川A88888,车型:大型高一,出发时间:2023-07-14 07:30,起点:成都城北客运站,终点:稻城亚丁。全票价格为0.02元,半票价格为130.00元。该班次由XXXX运营,共有42个座位。

请问您对以上两个班次有什么要求或者偏好吗?

> Finished chain.

3、代码示例

以下代码依旧使用langchain提供的tools实现,读者也可以使用openAI提供的SDK实现。

from langchain.tools import BaseTool
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from langchain.tools import format_tool_to_openai_function
from langchain.agents import AgentType, initialize_agent
from pydantic import BaseModel, Field
from typing import Optional, Type
from datetime import date
import requests
import json
import os

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613") #注意这里要用gpt-3.5-turbo-0613模型才能支持函数调用

# 定义入参解析规则
class ScheduleCheckInput(BaseModel):
    drv_date: str = Field(..., description="日期,请格式化为yyyy-mm-dd,日期当天从%s开始计算" % date.today())
    start_name: str = Field(..., description="起点")
    target_name: str = Field(..., description="终点")


class BusTool(BaseTool):
    name = "query_bus_by_date"
    description = "根据日期查询起止点的班次信息"

    def _run(self, drv_date, start_name, target_name):
        url = "http://test.test.com/"
        data = {"body": {
                    "startName": "%s",
                    "targetNo": "%s",
                    "drvTime": "%s"}
                }
        json_data = json.dumps(data) % (start_name, target_name, drv_date)
        response = requests.post(url, data=json_data.encode("utf-8"))
        return response.json().get("body").get("data")

    def _arun(self):
        raise NotImplementedError("This tool does not support async1")

    args_schema: Optional[Type[BaseModel]] = ScheduleCheckInput


def search_schedule(query: str) -> str:
    bus_tools = [BusTool()]
    open_ai_agent = initialize_agent(bus_tools,
                                     llm,
                                     agent=AgentType.OPENAI_FUNCTIONS,
                                     verbose=True)
    return open_ai_agent.run(query)


if __name__ == '__main__':
    search_schedule("请帮我查询13号成都到绵阳的班次信息")

总结

本文介绍了OpenAI在6月13日发布的重磅更新中,新增的Chat Completions API函数调用功能。通过函数调用,我们可以在聊天机器人中实现更加灵活和复杂的功能,例如从外部API获取实时数据、执行计算任务等。我们还提供了一个简单的代码示例,演示了如何使用函数调用功能。这些更新为构建强大的私有知识库聊天机器人提供了更多的可能性。

标签:班次,name,知识库,函数调用,date,GPT,import
From: https://www.cnblogs.com/myshare/p/17551603.html

相关文章

  • ChatGPT 问答00003 mysql中删除原来的自增ID,并重新根据字符串字段data字段排序重新生
    在MySQL中,自增ID是由MySQL引擎自动生成和维护的,通常与数据表的主键关联。删除自增ID并重新生成的需求比较特殊,因为自增ID的生成是基于数据表中已有的记录顺序的,直接删除和重新生成可能会破坏数据完整性和索引等方面的约束。不建议直接删除和重新生成自增ID,但你可以通过以下步骤实......
  • 【ChatGPT系列】数据库设计范式与最佳实践
    [本文出自天外归云的博客园]数据库范式一共有四个范式,分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和第四范式(4NF)。每个范式都有一些规则和规范,用于确保关系型数据库中的数据具有一定的一致性、完整性和有效性。随着范式级别的提高,规则和规范也越来越严格,要求数据库中的数据更加......
  • 基于GPT搭建私有知识库聊天机器人(四)问答实现
    前文链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(三)向量数据训练在前面的文章中,我们介绍了如何使用GPT模型搭建私有知识库聊天机器人的基本原理、环境安装、数据向量化。本文将进一步介绍如何使......
  • 关于ChatGPT与机器伦理学
    关于ChatGPT与机器伦理学机器人这一概念,最初不是出自计算机科学家或工程师之手,而是来自于捷克的戏剧家卡雷尔·恰佩克(KarlCapek)在1920年编排的一出名为“罗森的全能机器人”的舞台剧中。直到了1960年,随着美国的约瑟夫·恩格伯格(JosephEngelberger)创办了人类历史上的第一......
  • GPT-4镜像来了,体验核心能力
    1月份开始,chatgpt开始火上天了。但其实很多人都不知道它真正的能力和魅力在哪里。甚至有人不停的问他是男的女的,多大岁数,叫啥名字,然后问了几个无聊的闲聊问题后,觉得这个AI好像也没什么厉害的。正所谓是,提问者有多厉害,这个模型就会有多厉害。我把ChatGPT的核心能力归结为三点:......
  • gpt4和chatGPT的区别
    ​ 一觉醒来,万众期待的GPT-4,它来了! OpenAI老板SamAltman直接开门见山地介绍说:这是我们迄今为止功能最强大的模型!​有多强?根据OpenAI官方的介绍,GPT-4是一个超大的多模态模型,也就是说,它的输入可以是文字(上限2.5万字),还可以是图像。(看图)手套掉下去会怎样?它会掉到木板......
  • IDAE 知识库
    DEA安装教程IDEA的简单介绍IDEA全称lntelliJIDEA,是java语言对的集成开发环境,IDEA在业界被认为是公认最好的Java开发工具IDEA的主要优势功能强大强大的整合能力,:比如:GitMavenSpring等开箱即用的体验(集成版本控制系统,多语言支持的框架随时可用,无需额外安装插件)*......
  • GPT优化后效果
    #......
  • 松鼠智能AI:为您量身定制的chatgpt智能聊天机器人
    在当今的智能化时代,人工智能技术在各个领域都有着广泛的应用,其中聊天机器人更是得到了大家的热烈欢迎。然而,许多人在与AI聊天时却经常出现一种状况:聊天机器人明明有着强大的智能,却不能真正理解用户的需求,无法解答专业问题,经常给人一种“对牛弹琴”的感觉。为了解决这一问题,你可以尝......
  • GPT生产前端代码
    我让GPT生成一段前端代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Document</title><linkhref="https://cdn.quilljs.com/1.3.6/quill.snow.css"rel="......