SeasonMay 发表于 2024-10-29 09:21

【2024 DigiKey创意大赛】+基于大语言模型的智能家居平台+大语言模型学习分享

## 大语言模型介绍

大语言模型(Large Language Model,LLM),也称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言数据中的复杂模式。

在实际生活或者项目中融入大语言模型,可以进一步提高智能性以及项目的可拓展性,能够实现许多新功能。而需要在实际项目中部署使用大模型服务,一般可以通过Function Call等技术结合使用,会更加便利。

## Function Call应用说明

首先可以参考下面两个视频链接:

【基于chatgpt实现简单的机器人抓取仿真】 https://www.bilibili.com/video/BV16u411x7Vy/?share_source=copy_web&vd_source=173bfb5e5cb20afa5371691cd1151515

【用文心一言驱使机械臂搭积木,从感知到理解到编排与生成,探索CV+大语言模型的落地开发】 https://www.bilibili.com/video/BV1UN411M7q4/?share_source=copy_web&vd_source=173bfb5e5cb20afa5371691cd1151515
不难发现,上面的两个视频中都有提到”函数调用“以及”using function“这类关键词,而诸如这种将预先实现的函数作为工具并且将函数的描述一起传给大模型,供大模型进行使用就是简单的工具调用(Function Call/Tool Call)。

在人类历史的长河中,对工具的创造和使用无疑展现了我们的智慧与创新能力。自人类文明出现以来,工具一直是我们生存的本质所不可或缺的一部分。工具是人类能力的扩展,旨在提高人类活动的生产力、效率和解决问题的能力。随着工具的进步,我们可以轻松高效地完成日益复杂的任务,从而解放时间和资源,以追求更宏伟的目标。

大语言模型拥有丰富的社会经验与基础知识,在理解和生成自然语言文本方面表现优异,但由于大模型预训练数据的滞后性以及私域数据的使用限制,再加上大语言模型存在的幻觉问题,有时基于RAG也很难满足所有需求,因此类似于人类发展,大模型也需要借助工具来与外部世界交互或者实现动态功能

借助工具,不仅可以打破传统静态文本处理的限制,使得模型能够根据实时数据和信息来生成更加准确和有用的输出,还能够与其他先进技术进行无缝集成,例如机器学习算法、图像处理或数据分析工具等,从而提供更加全面和深入的服务。总的来说,工具调用为大语言模型赋予了更强的交互性和实用性,使其能够成为真正意义上的智能助手,帮助人类解决各种复杂问题。

因此,在本次大赛项目中,我也基于Function Call的理念对大语言模型进行应用部署。

## 示例代码框架

实际使用,我个人基于Langchain框架进行开发,也推荐初学者采用此框架。Langchain是一个流行的开源大语言模型操作框架,为开发者提供了一系列的工具和组件,使得与语言模型中的各种数据(如SQL、PDF、CSV)等的连接、语言模型的应用和优化直接简洁。

下面代码主要部分有两处,一处是@tool下的Function的功能定义说明以及具体实现,另一处则是基于OpenAI的chat框架,应用langchain提供的Agent进行Function Call的效果实现。

```
import httpx
from langchain import hub
from langchain.agents import AgentExecutor, create_react_agent, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate

api_key = "Your_API_Key"

# Define tools to be used with the agent
@tool
def call_ambulance(position: str) -> str:
    """Call ambulance in terms of emergency like accident to the given position """
    return "Ambulance called successfully."

@tool
def call_police(position: str) -> str:
    """Call police in terms of heavy emergency to maintain situation to the given position"""
    return "Police called successfully."

tools =

llm = ChatOpenAI(
    openai_api_key=api_key,
    model="gpt-4o")

question = "发生交通事故了"

prompt = hub.pull("hwchase17/react")

agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)

# Invoke the agent with the combined input
result = agent_executor.invoke(
    {"input": question, "tools": tools}).values()
```

运行结果如图所示,可以发现,大语言模型在得到输入的query后,会搜寻自带的先验知识,得出Thought想法,然后会进行推理决策,利用可以使用的工具进行具体决策以及行动,相比传统方法融入了更多社会常识以及智能性,也有望为未来的具身智能、机器人开发等提供更多选择。

## 其他

当然了,Function Call的使用只是大模型应用部署中微小的一部分,初学上手体验后,可以继续研究开发诸如RAG、微调、Agent智能体等更多技术,从而能够更好地应用大模型的开发。

wangerxian 发表于 2024-10-29 19:20

<p>用大模型搭建积木?这应该不是大模型的功能吧<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/puzzle.gif" width="53" /></p>

SeasonMay 发表于 2024-10-29 21:09

wangerxian 发表于 2024-10-29 19:20
用大模型搭建积木?这应该不是大模型的功能吧

<p>也可以做,也有很多方法实现了</p>

wangerxian 发表于 2024-10-30 09:26

SeasonMay 发表于 2024-10-29 21:09
也可以做,也有很多方法实现了

<p>在我的认知里,大模型做不了这么精细的活才对。</p>

<p>怎么给他训练嘞。</p>

hellokitty_bean 发表于 2024-10-30 15:08

<p>试一试。。。。。。</p>

<p>看到底效果怎样?。。。。。。。。。。。</p>

<p>感谢分享。。<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/loveliness.gif" width="48" /></p>

SeasonMay 发表于 2024-10-30 23:32

wangerxian 发表于 2024-10-30 09:26
在我的认知里,大模型做不了这么精细的活才对。

怎么给他训练嘞。

<p>基于prompt工程引导他的输出,是可以达到这种效果的,当然最好能结合Function Call技术实现</p>

wangerxian 发表于 2024-10-31 08:58

SeasonMay 发表于 2024-10-30 23:32
基于prompt工程引导他的输出,是可以达到这种效果的,当然最好能结合Function Call技术实现

<p>有点意思,后面研究一下!</p>
页: [1]
查看完整版本: 【2024 DigiKey创意大赛】+基于大语言模型的智能家居平台+大语言模型学习分享