LangChain 概念和结构
LangChain 是什么?
LangChain 是一个开源的软件框架,帮助开发者像搭乐高一样快速构建和优化基于语言模型的应用。它不是一个实物,而是一个工具箱,让我们能将大型语言模型(LLM)组合成有趣的应用。
为什么需要 LangChain?
即使有了强大的 LLM(如 GPT-4),它们也需要额外的组件和连接才能完全发挥潜力,比如访问最新的数据、与外部 API 互动、处理用户的上下文信息等。LangChain 提供了一套'说明书'和'工具',让 LLM 能够更好地融入到我们的应用中去。
例如,假设你想要用 GPT-4 建一个旅行顾问机器人。单独的 GPT-4 可能知道很多信息,但如果不能实时查找最新的航班信息或者酒店价格,建议就不够准确。LangChain 能让你的机器人链接到航班数据库,记住用户的旅行偏好,甚至根据用户以往的提问历史来提供个性化的建议。
LangChain 主要概念
LangChain 主要提供了 6 大类组件帮助我们更好地使用大语言模型,可以视为开源版的 GPT 插件,提供了丰富的大语言模型工具,可以在开源模型基础上快速增强模型的能力。
Models(模型)
LLMs(大型语言模型)
这些模型是 LangChain 积木盒中的基础积木。如同用乐高搭建房屋的地基,LLMs 为构建复杂的语言理解和生成任务提供了坚实的基础。
Chat Models(聊天模型)
这些模型就像是为你的应用制作对话能力。它们能够让应用程序进行流畅的对话,好比是给应用注入了会说话的灵魂。
Text Embedding Models(文本嵌入模型)
如果说其他模型让应用能够理解和生成文本,文本嵌入模型则提供了理解文本深度含义的能力。它们就像是一种特殊的积木块,可以帮助其他模块更好地理解每个块应该放在哪里。
Prompts(提示)
Prompt Templates(提示模板)
想象一下,你正在给应用编写剧本,告诉它们在不同场景下应该说什么。Prompt Templates 就是这些剧本,它们指导模型如何回答问题或者生成文本。
Indexes(索引)
LangChain 通过 Indexes 索引允许文档结构化,让 LLM 更直接、更有效地与文档互动。
Document Loaders(文档加载器)
这些就像是一个个小仓库,帮助你的智能模型存储和访问信息。Document Loaders 能够将文档加载到系统中,方便模型快速查找。
Text Splitters(文本分割器)
有时候你需要将一大块文本分成几个小块来构建更复杂的结构。Text Splitters 可以将长篇文本拆分成易于处理的小块。
Vector Stores(向量存储)
这是一种特殊的存储设施,帮助你的模型记住文本的数学表示(向量)。这就像是让积木块记住它们在整个结构中的位置。
Retrievers(检索器)
想象一下你需要从一堆积木中找到一个特定的小部件。Retrievers 能够快速在向量存储中检索和提取信息,就像是搜索引擎。
[图片:LangChain 索引架构示意图]
Memory(记忆):对话的连贯性
LangChain 通过 Memory 工具类为 Agent 和 Chain 提供了记忆功能,让智能应用能够记住前一次的交互,比如在聊天环境中这一点尤为重要。
Chat Message History(聊天消息历史)
最常见的一种对话内容中的 Memory 类,这就好比是在角色之间建立了一个记忆网络,使它们能够记住过去的对话,这样每次交流都能在之前的基础上继续,使得智能应用在每次对话中保持连贯性。
Chains(链)
Chain、LLM Chain、Index-related Chains
CHAIN 模块整合了大型语言模型、向量数据库、记忆系统及提示,通过 Agents 的能力拓展至各种工具,形成一个能够互相合作的独立模块网络。它不仅比大模型 API 更加高效,还增强了模型的各种应用,诸如问答、摘要编写、表格分析和代码理解等。
[图片:Chain 模块架构图]
Chain 是连接不同智能积木块的基本方式,而 LLM Chain 是最简单的 LLM+Prompts 的一种 chain,专门用于链接语言模型。Index-related Chains 则将索引功能集成进来,确保信息的高效流动。
[图片:Index-related Chains 示意图]
Agents(代理)
在 LangChain 的世界里,Agent 是一个智能代理,它的任务是听取你的需求(用户输入)和分析当前的情境(应用场景),然后从它的工具箱(一系列可用工具)中选择最合适的工具来执行操作。这些工具箱里装的是 LangChain 提供的各种积木,比如 Models、Prompts、Indexes 等。
Agent 接受一个任务,使用 LLM(大型语言模型)作为它的'大脑'或'思考工具',通过这个大脑来决定为了达成目标需要执行什么操作。它就像是一个有战略眼光的指挥官,不仅知道战场上的每个小队能做什么,还能指挥它们完成更复杂的任务。
[图片:Agent 组件架构图]
LangChain 中 Agent 组件的架构图如下,本质上也是基于 Chain 实现,但是它是一种特殊的 Chain,这个 Chain 是对 Action 循环调用的过程,它使用的 PromptTemplate 主要是符合 Agent Type 要求的各种思考决策模版。Agent 的核心思想在于使用 LLM 进行决策,选择一系列要执行的动作,并以此驱动应用程序的核心逻辑。通过 Toolkits 中的一组特定工具,用户可以设计特定用例的应用。
[图片:Agent 核心逻辑图]
Agent 执行过程:AgentExecutor
AgentExecutor 负责迭代运行代理,直至满足设定的停止条件,这使得 Agent 能够像生物一样循环处理信息和任务。
[图片:AgentExecutor 流程图]
观察(Observation)
在这个阶段,代理通过其输入接口接收外部的触发,比如用户的提问或系统发出的请求。代理对这些输入进行解析,提取关键信息作为处理的基础。观察结果通常包括用户的原始输入或预处理后的数据。
思考(Thought)
在思考阶段,代理使用预先设定的规则、知识库或者利用机器学习模型来分析观察到的信息。这个阶段的目的是确定如何响应观察到的情况。代理可能会评估不同的行动方案,预测它们的结果,并选择最合适的答案或行为。
在 LangChain 中,这个过程可能涉及以下几个子步骤:
- 理解用户意图:使用 NLP(自然语言处理)技术来理解用户的问题是什么。
- 推断所需工具:确定哪个工具(或工具组合)能解决用户的问题。
- 提取参数:提取所需工具运行的必要参数。这可能涉及文本解析、关键信息提取和验证等过程。
行动(Action)
根据思考阶段的结果,代理将执行特定的行动。行动可能是提供答案、执行任务、调用工具或者与用户进行进一步的交互。
在 LangChain 代理中,这通常涉及以下几个子步骤:
- 参数填充:将思考阶段提取的参数填入对应的工具函数中。
- 工具执行:运行工具,并获取执行结果。这可能是查询数据库、运行算法、调用 API 等。
- 响应生成:根据工具的执行结果构建代理的响应。响应可以是纯文本消息、数据、图像或其他格式。
- 输出:将生成的响应输出给用户或系统。
Agent 推理方式:AgentType
代理类型决定了代理如何使用工具、处理输入以及与用户进行交互,就像给机器人挑选不同的大脑一样,我们有很多种"智能代理"可以根据需要来选择。有的代理是为聊天模型(接收消息,输出消息)设计的,可以支持聊天历史;有的更适合单一任务,是为大语言模型(接收字符串,输出字符串)而设计的。而且,这些代理的能力也不尽相同:有的能记住你之前的对话(支持聊天历史),有的能同时处理多个问题(支持并行函数调用),也有的只能专心做一件事(适用于单一任务)。此外,有些代理需要我们提供一些额外信息才能更好地工作(所需模型参数),而有些则可以直接上手,不需要额外的东西。所以,根据你的需求和你所使用的模型,你可以选择最合适的代理来帮你完成任务,常见的代理类型如下:
| 智能代理类型 | 预期模型类型 | 支持聊天历史 | 支持多输入工具 | 支持并行函数调用 | 需要的模型参数 | 何时使用 |
|---|
| OpenAI Tools | 聊天型 | ✅ | ✅ | ✅ | tools | 如果你使用的是较新的 OpenAI 模型(1106 及以后) |
| OpenAI Functions | 聊天型 | ✅ | ✅ | | functions | 如果你使用的是 OpenAI 模型,或者是经过微调以支持函数调用的开源模型,并且暴露与 OpenAI 相同的函数参数 |
| XML | 大型语言模型 | ✅ | | | | 如果你使用的是 Anthropic 模型,或者其他擅长 XML 的模型 |
| Structured Chat | 聊天型 | ✅ | ✅ | | | 如果你需要支持具有多个输入的工具 |
| JSON Chat | 聊天型 | ✅ | | | | 如果你使用的是擅长 JSON 的模型 |
| ReAct | 大型语言模型 | ✅ | | | | 如果你使用的是简单模型,推理观察再行动 |
| Self Ask With Search | 大型语言模型 | | | | | 如果你使用的是简单模型,并且只有一个搜索工具,追问 + 中间答案的技巧,who/when/how |
Agent 与 Chain 的关系
如果说 Chain 是 LangChain 中的基础连接方式,那么 Agent 就是更高阶的版本,它不仅可以绑定模板和 LLM,还能够根据具体情况添加或调整使用的工具。简单来说,如果 Chain 是一条直线,那么 Agent 就是能够在多个路口根据交通情况灵活选择路线的专业司机。
LangChain 实际案例:人脸技术问题的智能排查助手
使用 LangChain 处理人脸识别问题的排查
随着人脸识别服务的线上线下日调用量和应用场景快速发展,人脸识别团队正在面临一个巨大的挑战,每天反馈到团队的各种识别问题的 case 过多,排查起来费时费力,为了快速诊断问题,团队决定使用 LangChain 来构建一个智能排查助手。这个助手可以分析用户问题,错误日志,与人脸识别的 APIs 进行交互,甚至生成修复建议。
在 LangChain 框架中,工具(Tools)是用于解决特定问题的可调用的功能模块。它们可以是简单的函数,也可以是更复杂的对象,能够实现一项或多项特定任务。下面将详细介绍几种不同的工具定义及其在人脸识别问题排查过程中的应用。
首先,我们需要导入依赖的函数,主要来自各个现有日志系统的接口,能够提取比对分,黑名单,读取人脸库大小等信息:
from face_functions import (
extract_compare_scores,
extract_local_group_size,
extract_actual_group_size,
perform_logic_judgement,
search_by_exact_query,
search_by_fuzzy_query,
blacklist
)
zmng_query 工具
当用户遇到人脸比对失败的情况时,人脸的日志系统都在 zmng 平台上,我们现在通过 zmng_query 工具提取 UID,根据 UID 查询相关的用户信息,包括他们是否在黑名单上,提取比对分数,并获取机具端及实际的人脸库大小信息,判断是什么原因识别不通过。
def zmng_query(uid):
return "需要调用 compare_scores_tool extract_local_group_size extract_actual_group_size blacklist_query perform_logic_judgement 这五个 tool,用于问题的排查输入"
zmng_query_tool = Tool(
name="zmng_query",
func=zmng_query,
description=(
"当用户刷脸比对不通过,需要确认是否为黑名单或其他原因时使用此工具。"
"此工具能查询黑名单状态,提取比对分数,并获取机具端及实际的 groupSize 信息,"
"以便于准确诊断比对失败的原因。需要通过 uid 或 zid 进行查询,"
"这是一个 9 位数编码,能唯一识别一个人。使用此工具时,至少提供一个参数 ['uid'] 或 ['zid']。"
)
)
这个工具用于从日志文件中提取比对分数,这对于诊断是人脸比对技术问题还是用户本身的问题非常关键。
compare_scores_tool = Tool(
name="extract_compare_scores",
func=extract_compare_scores,
description=(
"当用户刷脸比对不通过时,用于提取日志中的比对分数。"
)
)
这两个工具分别用于提取机具端和实际的人脸库大小(groupSize)。这项信息有助于判断是否所有必要的人脸数据都已经下发到机具端。
local_group_size_tool = Tool(
name="extract_local_group_size",
func=extract_local_group_size,
description=(
"当用户刷脸比对不通过时,用于提取日志中机具端的人脸库大小 groupSize。"
)
)
actual_group_size_tool = Tool(
name="extract_actual_group_size",
func=extract_actual_group_size,
description=(
"当用户刷脸比对不通过时,用于提取实际的人脸库大小 groupSize。"
)
)
blacklist_query 工具
此工具用于查询指定用户是否在黑名单中,这是人脸识别系统中的一项常见检查。
blacklist_query_tool = Tool(
name="blacklist_query",
func=blacklist,
description="查询指定 UID 是否在黑名单中。"
)
perform_logic_judgement 工具
根据比对分数和本地库与实际库的大小,此工具能够给出比对不通过的分析结论。
logic_judgement_tool = Tool(
name="perform_logic_judgement",
func=perform_logic_judgement,
description="根据比对分数和本地与实际库的大小,给出比对不通过的分析结论。"
)
在 LangChain 框架中,tools 是一系列用于执行特定任务的函数或类的实例,它们可以被智能代理(Agent)调用以完成用户请求。在提供的上下文中,需要用到的 tool 已经定义好了。
tools = [
compare_scores_tool,
local_group_size_tool,
actual_group_size_tool,
blacklist_query_tool,
zmng_query_tool
]
将所有这些工具组装到一个列表中,然后可以使用这个列表来初始化一个智能代理(Agent),该代理能够运行工具并与用户进行互动。在 LangChain 中,智能代理负责管理用户的输入,并决定调用哪个工具来处理特定的请求或问题。通过这种方式,我们可以构建一个强大的、能够解决人脸识别相关问题的智能系统。
聊天模型实例化
LangChain 使用大型语言模型(LLM)如 GPT-4 来处理自然语言的理解和生成。在这里,我们创建一个聊天模型实例,这将允许我们的代理与用户进行自然语言交互:
llm = OpenAI(temperature=0)
chat_model = ChatOpenAI(model="gpt-4", temperature=0)
temperature 参数控制生成文本的创造性;较低的 temperature 值(例如 0)将导致更确定性和一致性的响应。
用户交互
一旦工具和聊天模型都被实例化,我们就可以初始化智能代理。在 LangChain 中,代理(Agent)是与用户进行交互的主体,它使用上面定义好的 tools 和 LLM 来处理用户的输入并提供响应。
agent = initialize_agent(tools, chat_model, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
print("您好,有什么能帮助您?(输入 'exit' 结束对话)")
while True:
user_input = input("You: ")
if user_input.lower() in ["exit", "goodbye", "quit"]:
print("再见!")
break
response = agent.run(user_input)
print("Agent:", response)
在这个交互式循环中,智能代理会根据用户的输入运行相应的工具,并使用聊天模型生成自然语言响应。这使得用户可以以对话方式提出问题,并得到解答。
智能代理运行过程
在 LangChain 框架中,智能代理(Agent)通常按照观察(Observation)- 思考(Thought)- 行动(Action)的模式来处理任务。这个模型相当于一个决策循环,代理首先观察外部输入,然后进行内部思考以产生相应的行动方案。下面详细解释这个技术链路和逻辑:
next_action = agent.get_action(...)
while next_action != AgentFinish:
observation = run(next_action)
next_action = agent.get_action(..., next_action, observation)
return next_action
for agent_action in actions:
if run_manager:
run_manager.on_agent_action(agent_action, color="green")
if agent_action.tool in name_to_tool_map:
tool = name_to_tool_map[agent_action.tool]
return_direct = tool.return_direct
color = color_mapping[agent_action.tool]
tool_run_kwargs = self.agent.tool_run_logging_kwargs()
if return_direct:
tool_run_kwargs["llm_prefix"] = ""
observation = tool.run(
agent_action.tool_input,
verbose=self.verbose,
color=color,
callbacks=run_manager.get_child() if run_manager else None,
**tool_run_kwargs,
)
完整的技术链路示例
我们构建了一个关于人脸识别的问答智能代理,用户询问:'为什么我的脸无法被系统识别?'以下是这个代理按照 Observation-Thought-Action 模式处理此请求的过程:
[图片:人脸识别排查技术链路示例]
利用 LangChain 与人脸问答知识库进行交互
下面这些技术模块共同构成了一个基于 LangChain 与人脸知识库进行交互的系统。
模块 1: 问题与答案数据的加载
这个模块负责读取问题和答案对,并将它们存储在一个字典结构中,以便后续检索。
def load_qa_data(filepath):
qa_data = {}
with open(filepath, 'r', encoding='utf-8') as file:
lines = file.readlines()
current_question = None
answer_lines = []
for line in lines:
if line.startswith('问题: '):
if current_question:
qa_data[current_question] = ' '.join(answer_lines).strip()
current_question = line[len('问题: '):].strip()
answer_lines = []
elif current_question:
answer_lines.append(line.strip())
if current_question and answer_lines:
qa_data[current_question] = ' '.join(answer_lines).strip()
return qa_data
模块 2: 嵌入向量的生成和 Faiss 索引创建
Faiss 是 Facebook AI Research (FAIR) 精心打造的一款强大向量数据库,专为高效执行相似性搜索和稠密向量聚类而设计。在处理大型数据集时表现尤为出色,能迅速在海量向量中锁定与查询向量最为匹配的项,极大地加速了搜索流程。无论是机器学习还是数据挖掘,Faiss 都是一个不可或缺的工具,常见的应用场景包括但不限于推荐系统、图像搜索和自然语言处理。
除了 Faiss,LangChain 支持的向量数据库范围广泛,覆盖了多种语言和平台。这些数据库包括阿里云的 OpenSearch、AnalyticDB、Annoy、Atlas、AwaDB,以及 Azure Cognitive Search、BagelDB、Cassandra、Chroma、Clarifai 等。此外,还有 ClickHouse Vector Search、Activeloop's Deep Lake、Dingo,以及各种 DocArray 搜索能力,如 DocArrayHnswSearch 和 DocArrayInMemorySearch。ElasticSearch、Hologres、LanceDB、Marqo、MatchingEngine、Meilisearch、Milvus、MongoDB Atlas 和 MyScale 也在支持之列。OpenSearch 和 pg_embedding 也提供了优质的搜索服务。这些多样化的数据库选择使得 LangChain 能够在不同的环境和需求下提供灵活、高效的搜索能力。
OpenAIEmbeddings() 初始化
embeddings_model = OpenAIEmbeddings()
这一行创建了一个 OpenAIEmbeddings 实例,它是用来生成文本 embedding 的。这些 embedding 是高维向量,可以捕捉文本内容的语义信息,用于文本之间的相似性比较。
创建 FAISS 索引
def create_faiss_index(embedding_matrix):
dimension = embedding_matrix.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(embedding_matrix.astype(np.float32))
return index
create_faiss_index 函数接受一个 embedding 矩阵(通常是二维数组,其中每行是一个向量),初始化一个 FAISS 索引,并将这些向量添加到索引中。这个索引后续将用于相似性搜索。
在 FAISS 索引中搜索
def search_faiss_index(query_embedding, index):
query_embedding = np.array(query_embedding).astype(np.float32)
_, indices = index.search(np.array([query_embedding]), 1)
return indices[0][0]
search_faiss_index 函数获取一个查询向量和一个 FAISS 索引作为输入,然后使用这个索引来找到与查询向量最相似的存储向量。函数返回最相似项的索引,这通常用来在一个数据库或列表中检索具体项。
模块 3: 精确匹配查询
当用户提出一个特定的问题时,这个功能会根据用户的输入在知识库中查找精确匹配的问题。
def search_by_exact_query(user_query):
qa_data = load_qa_data(filepath)
return(get_answer(qa_data, user_query))
模块 4: 模糊匹配查询
这个模块使用嵌入向量和 Faiss 索引来找到与用户查询最相似的问题,并返回相应的答案。
- 初始化文本嵌入模型。
- 使用文本嵌入模型将文本转换为向量。
- 使用这些嵌入向量创建 FAISS 索引。
- 当用户提出查询时,将查询文本也转换为嵌入向量。
- 使用 FAISS 索引找到最相似的嵌入向量。
def search_by_fuzzy_query(user_query):
qa_data = load_qa_data(filepath)
questions = list(qa_data.keys())
question_embeddings_list = embeddings_model.embed_documents(questions)
question_embeddings = np.array(question_embeddings_list)
faiss_index = create_faiss_index(question_embeddings)
user_query_embedding_list = embeddings_model.embed_documents([user_query])
user_query_embedding = np.array(user_query_embedding_list[0])
closest_question_index = search_faiss_index(user_query_embedding, faiss_index)
closest_question = questions[closest_question_index]
return(qa_data[closest_question])
search_by_exact 和 search_by_fuzzy 工具
在 tools 列表中,增加 search_by_exact 和 search_by_fuzzy 两个工具能力,其他逻辑不变。
tools = [
Tool(
name="search_by_exact",
func=search_by_exact_query,
description="当需要准确回答用户问题时使用此工具。使用时需提供参数 ['query']。如果查询为错误代码,直接查询并返回对应的错误原因和解决方法;如果观察结果显示有必要或可选发送邮件,请调用 send_email 工具。"
),
Tool(
name="search_by_fuzzy",
func=search_by_fuzzy_query,
description="当需要回答用户问题时使用此工具。使用时需提供参数 ['query']。如果查询为错误代码,直接查询并返回对应的错误原因和解决方法;如果查询非错误代码,可咨询此工具相关解决方案;如果观察结果显示有必要或可选发送邮件,请调用 send_email 工具。"
),
send_email_tool,
compare_scores_tool,
local_group_size_tool,
actual_group_size_tool,
blacklist_query_tool,
zmng_query_tool
]
通过 LangChain 的灵活性和模块化,这个能够自动化处理人脸识别问题的智能排查助手,大大提高了问题诊断的效率并减轻了人工负担。
注意观察下面 agent 的 Observation Thought Action 三个阶段,agent 会自动提取出 tool 需要的参数,形成 action。
[图片:Agent 参数提取示例]
智能体的快速发展
智能体的基本概念
智能体是什么?
一句话总结,Langchain 这个开发框架,是为了让我们更容易更低成本的构建大语言模型的智能应用,其中有自主行动能力,能够思考跟外部环境/工具交互的叫 Agent,智能体。
AI Agent 业界定义是具有环境感知、决策制定和行动执行能力的智能实体,并且能够通过独立思考和工具调用来逐步实现既定目标。随着大型语言模型(LLM)的出现,AI Agent 又被定义为基于 LLM 驱动的 Agent 实现对通用问题的自动化处理。当 AI Agent 被赋予一个目标时,它能独立地进行思考和行动,详细规划出完成任务所需的每一个步骤,并通过外部反馈与自我思考来创建解决问题的 prompt。例如,当要求 ChatGPT 购买咖啡时,它可能会回应'无法购买咖啡,因为它仅是一个文字型 AI 助手'。AI Agent 的关键特征包括自治性、知觉、反应能力、推理与决策能力、学习能力、通信能力以及目标导向性,这些特性使得智能体能成为真正释放 LLM 潜能的关键,它能为 LLM 核心提供强大的行动能力。
智能体的发展方向
智能体(AI Agent)的发展可谓是人工智能领域的一个重要里程碑。大语言模型不再局限于处理文本信息,它们的能力正在扩展到与世界各种软件工具的直接交互中。通过调用 APIs,这些模型现在可以获取信息、执行分析、生成报告、发送通知,甚至访问网络,访问数据库,使其功能变得无比强大。这种变化,让这些模型从单纯的文本处理者转变为真正的数字助理,能够理解用户的需求,并使用正确的工具为用户提供服务。
随着技术的发展,大语言模型使用工具能力与日俱增。早期的模型可能需要明确的、结构化的指令才能正确调用几十个工具,而现在,部分模型可以根据目标自由的调用上万个工具,并采取相应的行动。想象一下,仅通过简单的对话,你的智能代理就能为你预订餐厅、安排行程、购物,甚至编程。这种灵活性和智能度的提升,极大地增强了用户的体验。
另一个领域的进步是智能体正在从单一的智能代理到多代理系统的转变。初期,一个代理只能单一地执行任务,而现在,多个代理能够同时工作,协同完成更加复杂的任务。例如,一个代理可以负责数据收集,而另一个代理同时进行数据分析,第三个代理则负责与用户沟通结果。这些代理之间的协同工作像是一个高效的团队,每个成员都在其擅长的领域发挥作用。
同时,智能代理与人类用户之间交互也在往更自然化的方向发展,多代理系统工作过程中,可以引入人类的决策。这种人机交互的深度,使得智能代理不仅是工具的操作者,更是人类的合作者。
正是这些技术进步,塑造了我们今天所见证的智能体技术景观,大语言模型在工具使用能力上的显著提升以及智能代理的发展,为未来的可能性打下了坚实的基础。全球范围内,新兴的智能体技术如 OpenAI 的 WebGPT 为模型赋予了利用网页信息的能力,Adept 培养的 ACT-1 能独立于网站操作并使用 Excel、Salesforce 等软件,谷歌的 PaLM 项目旗下的 SayCan 和 PaLM-E 尝试将 LLM 与机器人相结合,Meta 的 Toolformer 探索使 LLM 能够自主调用 API,而普林斯顿的 Shunyu Yao 所做的 ReAct 工作则结合了思维链 prompting 技术和'手臂'概念,使 LLM 能够搜索并利用维基百科信息。随着这些技术的不断完善和创新,我们有望完成更多曾经难以想象的任务,开启智能体技术的崭新篇章。
智能体的分类
[图片:智能体分类示意图]
各种智能体在快速发展
[图片:智能体发展现状图]
全球范围内,多个 AI 智能体产品如 AiAgent.app 和 GPT Researcher 已被推出,并在媒体报道、行业分析、研究助理等领域获得成功应用。这些智能体设计得足够灵活,能够调用软件应用和硬件设备,大大提升了工作效率和便利性。尽管 AI 智能体的发展时间短暂,它们迅速在各行业中得到认可。随着大型语言模型(LLMs)的多模态能力和计算力的增强,早年提出的智能体理念得以迅速实现,并广泛应用于多个领域。各种开源 AI 智能体的出现,加速了技术供应商和创业团队引入智能体的步伐,并帮助更多组织认识到并接受了 AI 智能体的概念,这可能成为 LLMs 落地的主要模式,并助力多个行业更好地利用 LLMs。
结语
LangChain 为大型语言模型提供了一种全新的搭建和集成方式,正如乐高积木提供了无尽的创造可能。通过这个强大的框架,我们可以将复杂的技术任务简化,让创意和创新更加易于实现。在第一篇的内容中,我们穿越了 LangChain 的世界,体验了如同搭建乐高积木般构建语言模型应用的乐趣。从 LangChain 的核心概念到其在现实世界中人脸问题的智能排查应用,我们见证了这一框架如何助力智能体的创新与成长。
在第二篇的内容中,我们讨论了智能体的发展,目前主要呈现两大方向。首先,我们看到了诸如 Gorilla 和 ToolLLaMa 这样的进步,它们通过增强大型语言模型(LLMs)本身的工具使用能力,为我们带来直观、高效的互动体验。这些工具的发展将大语言模型的潜力发挥到极致,为智能体提供了更为强大的支持功能。
另一方向是多代理协同,像 MetaGPT 和 ChatDev 这样的系统展示了通过多智能体的合作可以如何高效解决问题。这种多代理模式模拟了人类团队工作的方式,每个智能体扮演特定的角色,共同完成任务。这不仅提高了任务执行的效率,也开启了智能代理未来无限的可能性。
随着技术的不断进化,智能代理正在从单一任务执行者转变为能够协同工作的团队成员。这一转变不仅扩大了智能体在各行各业中的应用范围,也为未来出现的人与智能体之间的互动提供了基础。让我们携手前进,共同迎接智能体技术带来的充满惊喜的新时代。
[图片:智能体未来展望]