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查询相关的用户信息,包括他们是否在黑名单上,提取比对分数,并获取机具端及实际的人脸库大小信息,判断是什么原因识别不通过。
# 定义 zmng_query 工具的具体实现函数
def zmng_query(uid):
# 实现查询 zmng 平台以获取与 uid 相关的错误详情
# 查询可能包括黑名单状态、比对分数和 groupSize
# 返回查询结果
return "需要调用compare_scores_tool extract_local_group_size extract_actual_group_size blacklist_query perform_logic_judgement 这五个tool,用于问题的排查输入"
# 创建 zmng_query 工具实例
zmng_query_tool = Tool(
name="zmng_query",
func=zmng_query,
description=(
"当用户刷脸比对不通过,需要确认是否为黑名单或其他原因时使用此工具。"
"此工具能查询黑名单状态,提取比对分数,并获取机具端及实际的groupSize信息,"
"以便于准确诊断比对失败的原因。需要通过uid或zid进行查询,"
"这是一个9位数编码,能唯一识别一个人。使用此工具时,至少提供一个参数['uid']或['zid']。"
)
)
extract_compare_scores 工具
这个工具用于从日志文件中提取比对分数,这对于诊断是人脸比对技术问题还是用户本身的问题非常关键。
compare_scores_tool = Tool(
name="extract_compare_scores",
func=extract_compare_scores,
description=(
"当用户刷脸比对不通过时,用于提取日志中的比对分数。"
)
)
extract_local_group_size 和 extract_actual_group_size 工具
这两个工具分别用于提取机具端和实际的人脸库大小(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, #"当用户刷脸比对不通过时,用于提取日志中机具端的人脸库大小groupSize。"
actual_group_size_tool, #"当用户刷脸比对不通过时,用于提取实际的人脸库大小groupSize。"
blacklist_query_tool, #"查询指定UID是否在黑名单中。"
zmng_query_tool
]
将所有这些工具组装到一个列表中,然后可以使用这个列表来初始化一个智能代理(Agent),该代理能够运行工具并与用户进行互动。在LangChain中,智能代理负责管理用户的输入,并决定调用哪个工具来处理特定的请求或问题。通过这种方式,我们可以构建一个强大的、能够解决人脸识别相关问题的智能系统。
聊天模型实例化
LangChain使用大型语言模型(LLM)如GPT-4来处理自然语言的理解和生成。在这里,我们创建一个聊天模型实例,这将允许我们的代理与用户进行自然语言交互:
tools = [
compare_scores_tool, #"当用户刷脸比对不通过时,用于提取日志中的比对分数。"
local_group_size_tool, #"当用户刷脸比对不通过时,用于提取日志中机具端的人脸库大小groupSize。"
actual_group_size_tool, #"当用户刷脸比对不通过时,用于提取实际的人脸库大小groupSize。"
blacklist_query_tool, #"查询指定UID是否在黑名单中。"
zmng_query_tool
]
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)的模式来处理任务。这个模型相当于一个决策循环,代理首先观察外部输入,然后进行内部思考以产生相应的行动方案。下面详细解释这个技术链路和逻辑:
#AgentExecutor的核心逻辑,伪代码:
next_action = agent.get_action(...)
while next_action != AgentFinish:
observation = run(next_action)
next_action = agent.get_action(...,next_action, observation)
return next_action
#实际AgentExecutor中的部分相关代码:
for agent_action in actions:
if run_manager:
run_manager.on_agent_action(agent_action, color="green")
# Otherwise we lookup the tool
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"] = ""
# We then call the tool on the tool input to get an observation
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模式处理此请求的过程:
最后分享
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
5. 大模型面试题
面试,不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费
】
如有侵权,请联系删除。