当前位置: 首页 > news >正文

隆尧企业做网站济南网站制作

隆尧企业做网站,济南网站制作,网站下载系统如何做系统,photoshop安卓版目录 大语言模型(LLM) 的function calling实验:OpenAI之function calling序列图:function calling如何工作详情: 对话内容参考代码 后续: 使用LangChain实现function calling参考 大语言模型(LLM) 的function calling 大语言模型(LLM)可以使用自然语言与…

目录

  • 大语言模型(LLM) 的function calling
  • 实验:OpenAI之function calling
    • 序列图:function calling如何工作
    • 详情: 对话内容
    • 参考代码
  • 后续: 使用LangChain实现function calling
  • 参考

大语言模型(LLM) 的function calling

大语言模型(LLM)可以使用自然语言与人类对话。但在使用它完成某项复杂工作时,很多时候必须依赖其他外部工具,这包括但不限于:

  • 训练的知识库和提示词以外的知识。包括某些垂直细分领域以及非公开的数据。
  • 计算任务。相信我,即使它给出的结果看起来很像样,你也不能相信它在计算方面的能力;它无法保证100%的准确性。
  • 实时数据。需要外部工具提供。

能识别需要使用的外部工具,能根据其结果数据完成对话的功能叫做function calling。

实验:OpenAI之function calling

OpenAI的GPT作为LLM的代表作,我们将给它提出如下问题:

问题:一共有3个人,每个人有15个苹果,10个鸭梨,一共有多少苹果?
注: 这个简单的逻辑和算数题只作为实验用途;实际应用中可以扩展到复杂的计算。

我们将给GPT提供两个function/tool。一个是乘法,一个是加法。
注: 其中加法用来迷惑GPT。

我们期待的结果:GPT能判断使用乘法及其参数,并使用乘法function calling给出的结果数据,最终返回正确答案:
三个人一共有45个苹果。

序列图:function calling如何工作

我们的代码和GPT将怎样完成这个过程呢?这里将整个过程描绘在下面的时序图中:

代码 大模型LLM 1. 调用对话接口,告诉LLM提示词+可使用的functions/tools定义 2. 需要调用的functions/tools及调用参数 3. 将步骤2中LLM的回复加入对话 4. 循环执行function calling,并将结果加入对话 5. 调用对话接口,需要以上所有对话信息 6. 最终回答 alt [分支:需要function calling] [分支:不需要function calling] 代码 大模型LLM

详情: 对话内容

以下内容是真实的对话历史,程序和GPT配合按照我们的预想完成了整个过程,并最终给出了正确答案。
注:以下用到的UserMessage, AIMessage, FunctionMessage都是LangChain中的概念;它比较贴切的抽象了不同role的对话项。


步骤1中的对话项:UserMessage | 向GPT输入对话提示词。

#提示词
{"role": "user","content": "一共有3个人,每个人有15个苹果,10个鸭梨,一共有多少苹果?"
}

另外,在调用GPT接口时,定义了2个function type tools:乘法multiply和加法add。内容参见下一部分的代码部分。


步骤2中的对话项:AIMessage | GPT返回需要调用的functions/tools及其调用参数。

#这里GPT没有给出最终答案,它识别出了需要调用乘法multiply,参数一first_int为3个人,参数二second_int为15个苹果/每人。
{"content": null,"role": "assistant","function_call": null,"tool_calls": [{"id": "call_ZMbo4SiA2iaZUSLJMyX8ZzkP","function": {"arguments": "{\"first_int\":3,\"second_int\":15}","name": "multiply"},"type": "function"}]
}

步骤4中的对话项:FunctionMessage |function calling的调用结果数据。
tool_call_id对应步骤2中的tool_calls元素中的id。content为程序调用function/tool后的结果数据。

#将function calling的结果为3*15=45,设定role为tool,将其加入对话中。
{"tool_call_id": "call_ZMbo4SiA2iaZUSLJMyX8ZzkP","role": "tool","name": "multiply","content": "45"
}

步骤6中的对话项:AIMessage | 程序将以上所有对话项发送给GPT,GPT用自然语言返回最终结论。

#最终结果为:三个人一共有45个苹果。
{"content": "三个人一共有45个苹果。","role": "assistant","function_call": null,"tool_calls": null
}

参考代码

function calling的实现代码如下:

import json# 初始化环境和OpenAI
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
client = OpenAI()#调用GPT大模型
def get_completion(messages, tools, model="gpt-3.5-turbo"):response = client.chat.completions.create(model=model,messages=messages,# tool_choice支持设置 "auto"(由模型决定是否调用tool) 或者 "none" (不调用tool)作为value。 有tools定义时默认由模型决定。# 也可以强制要求必须调用指定的函数,如下所示# tool_choice= {"type": "function", "function": {"name": "multiply"}} ,  tools=tools)return response.choices[0].message#定义function/tool 1: multiply
def multiply(first_int: int, second_int: int) -> int:"""两个整数相乘"""return first_int * second_int#定义function/tool 2: add
def add(first_add: int, second_add: int) -> int:"""两个整数相加"""return first_add + second_add#以列表形式将function calling的格式告诉大模型
tools=[{"type": "function","function": {"name": "multiply","description": "两个整数相乘","parameters": {"type": "object","properties": {"first_int": {"type": "integer","description": "第一个乘数",},"second_int": {"type": "integer","description": "第二个乘数",}},"required": ["first_int", "second_int"],}}},{"type": "function","function": {"name": "add","description": "两个整数相加","parameters": {"type": "object","properties": {"first_add": {"type": "integer","description": "第一个加数",},"second_add": {"type": "integer","description": "第二个加数",}},"required": ["first_add", "second_add"],}}
}]# 调用大模型
prompt = "一共有3个人,每个人有15个苹果,10个鸭梨,一共有多少苹果?"
messages = [{"role": "user", "content": prompt}
]
response = get_completion(messages, tools)# 把大模型的回复加入到对话中
messages.append(response)  # 处理大模型需要function calling的情况
while (response.tool_calls is not None):# 循环进行function calling,将结果加入到对话中for tool_call in response.tool_calls:selected_tool = {"add": add, "multiply": multiply}[tool_call.function.name]args = json.loads(tool_call.function.arguments)tool_output = selected_tool(**args)messages.append({"tool_call_id": tool_call.id,  # 用于标识函数调用的 ID"role": "tool","name": tool_call.function.name,"content": str(tool_output)  # 数值result 必须转成字符串})# 调用大模型并把大模型的回复加入到对话中response = get_completion(messages, tools)messages.append(response)  print("=====最终回复=====")
print(response.content)

后续: 使用LangChain实现function calling

后续将更新:如何使用LangChain实现function calling,LangChain对比原生调用能提供哪些便利,以及其中可能出现的坑。

参考

OpenAI / function calling
LangChain / Tool/function calling

http://www.hkea.cn/news/328596/

相关文章:

  • 上海网络营销软件windows优化大师win10
  • 专做美妆的视频网站ui设计
  • 平度市建设局网站济宁百度推广价格
  • 茶类网站建设方案西安网站seo排名优化
  • 南和县住房和建设局网站石家庄整站优化技术
  • 做教育网站销售的好吗成都百度网站排名优化
  • 展览展会网页模板下载河南网站优化排名
  • 自己做网站上传视频疫情二十条优化措施
  • 网站排名上升 优帮云网络销售培训学校
  • 对于政务网站建设的建议网站收录优化
  • 网站策划与建设阶段的推广方法网络软文怎么写
  • 漳州公司做网站重庆网站建设
  • 十大网络平台有哪些网站关键词排名seo
  • 建b2c网站google官方下载安装
  • 广州b2b网站建设公司推广网站
  • 新乡市封丘县建设局网站百度教育官网登录入口
  • 网站开发项目点击器
  • 建公司网站需要多少钱推广普通话手抄报内容资料
  • 东莞市建设监督网站首页app宣传推广方案
  • 网站设计基本功能域名免费注册0元注册
  • 徐州网站建设的特点营销咨询公司
  • 网站建设问题表在seo优化中
  • 网站建设公司 倒闭店铺推广方法
  • 网站搭建素材短视频培训
  • amazon虚拟机免费做网站百度信息流怎么收费
  • 深圳做网站推广公司聊城seo整站优化报价
  • 深圳专业app网站开发企业网站建设原则是
  • 网站开发师职责柳州网站建设哪里有
  • 自己做的网站怎么改电话网络推广代运营公司
  • 做水果的网站有哪些google高级搜索