Agent智能体开发:让AI Agent自主调用卡证检测能力完成业务流程
Agent智能体开发让AI Agent自主调用卡证检测能力完成业务流程最近在跟几个做金融科技的朋友聊天他们都在头疼一件事线上开户审核。用户上传的身份证、银行卡照片角度千奇百怪光线明暗不一有些甚至拍得模糊不清。审核员每天要花大量时间手动核对、矫正、录入信息效率低不说还容易出错。“要是能有个智能助手能看懂用户要办什么业务自动把证件信息提取出来填好表那该多省事。”朋友这句话点醒了我。这不正是AI Agent能大显身手的地方吗一个能理解意图、会调用工具、能完成复杂任务的智能体。今天我就想跟你聊聊怎么把一个用于卡证检测和矫正的垂直模型塞进一个AI Agent的“工具箱”里让它能自主完成从“接收指令”到“输出结果”的整个业务流程。我们以金融开户审核这个具体场景为例看看Agent的“工具调用”能力到底能带来多大的改变。1. 场景与痛点当开户审核遇上AI想象一下这个再熟悉不过的场景用户在小程序或APP上申请开户。流程通常是用户拍照上传身份证正反面、银行卡照片然后手动填写表单上的姓名、身份证号、卡号等信息。后台审核人员需要下载这些图片肉眼核对信息是否一致判断图片是否清晰、合规有时还得把歪斜的图片摆正。这里面的麻烦事可不少用户体验差用户需要反复调整拍照角度确保图片清晰、方正填写长串数字也容易出错。运营效率低审核完全依赖人工一个熟练的审核员处理一单也需要几分钟遇到高峰期堆积如山。成本与风险高人力成本持续投入且人工核对难免有疏忽带来信息录入错误或欺诈风险。传统的自动化方案比如简单的OCR识别接口往往很“笨”。它只能识别图片中的文字但无法理解业务上下文。比如用户传了一张身份证和一张水电费账单OCR会把所有文字都吐出来但系统不知道哪个是姓名、哪个是地址更不会判断这张身份证是不是本次业务需要的。我们需要的是一个有“脑子”的自动化流程。这个“脑子”就是AI Agent。它不仅能“看见”调用视觉模型处理图片还能“理解”根据对话判断用户意图最后“执行”将提取的信息填入正确的业务字段。这就是我们接下来要构建的智能开户审核助手。2. 智能体设计给AI装上“眼睛”和“手”要让Agent完成开户审核我们得先想清楚它需要哪些能力。这就像组建一个团队你需要一个能沟通的项目经理大语言模型一个眼神好、手稳的质检员卡证检测矫正模型还需要一套标准操作流程业务逻辑。2.1 核心组件拆解我们的智能体主要由三部分组成“大脑” - 任务规划与决策中心LLM这是Agent的核心通常由一个能力强的大语言模型担任。它的职责是理解用户意图分析用户说的“我要开户”或“帮我验证一下这张身份证”明白接下来要启动“开户审核”流程。规划任务步骤把“开户审核”这个大任务拆解成“引导上传证件”、“调用模型检测”、“提取并核验信息”、“填写表单”等一系列子任务。决策工具调用在合适的时机决定调用“卡证检测矫正工具”来处理用户上传的图片。处理与生成回复综合工具返回的结果和业务规则生成给用户的下一步引导或最终确认信息。“眼睛”和“手” - 专业工具卡证检测矫正模型这是一个独立的、专精的垂直模型。它不负责理解只负责执行特定高精度任务。在这个场景里它的能力包括检测与分类从用户上传的图片中精准定位哪部分是身份证、哪部分是银行卡并判断证件的类型和正反面。矫正与增强自动将倾斜、透视变形的证件图片矫正为标准的正面视图并优化亮度、对比度提升清晰度。结构化信息提取从矫正后的图像中高精度地识别并提取出关键字段如姓名、身份证号、有效期、银行卡号等并以结构化的JSON格式输出。“工作流程” - 智能体框架与业务逻辑这是将大脑和工具连接起来的神经系统和工作手册。它定义了工具的描述用LLM能理解的方式告诉“大脑”我们有一个叫“process_id_card”的工具它能干什么需要输入什么一张图片会输出什么一个包含姓名、号码的JSON。对话与状态管理记录和多轮对话的上下文管理业务流程的状态例如已收到身份证正面等待上传反面。业务规则校验在LLM整合信息后执行额外的业务逻辑比如检查身份证是否在有效期内银行卡号是否符合Luhn算法等。2.2 工作流程一次完整的智能交互当用户说“我想办理银行卡开户”时幕后会发生这样一连串的自动化事件意图识别Agent的“大脑”LLM分析对话识别出“开户”意图并触发开户审核流程。引导与收集Agent引导用户“请上传您的身份证正面照片。”用户上传图片后Agent将图片暂存。工具调用决策“大脑”根据当前步骤需要处理身份证和可用工具列表决定调用process_id_card工具。执行专业任务Agent自动将用户上传的图片发送给卡证检测矫正模型。模型默默完成检测、矫正、识别等一系列操作返回一个干净的结构化数据{“name”: “张三”, “id_number”: “110101199003071234”}。信息整合与下一步“大脑”收到工具返回的结果将其整合到对话上下文中。然后决定下一步动作“身份证正面信息已收取。请上传身份证反面照片。”流程推进与核验重复步骤3-5处理完所有必要证件。最后“大脑”将所有提取的信息汇总并可以调用另一个“信息核验”工具或内置规则进行逻辑校验如正反面信息是否一致。完成与确认Agent生成最终回复“您的开户信息已审核通过。姓名张三身份证号11010119900307****银行卡号6217********1234。请确认信息无误后提交。”整个过程用户感觉只是在和一个耐心的客服对话而背后则是Agent在智能地调度专业工具串联起了一条高效、准确的流水线。3. 实战构建从概念到代码理论说得再多不如动手搭一个看看。下面我们以一种流行的Agent开发框架例如基于OpenAI的Assistant API或LangChain的思路来勾勒这个智能体的实现骨架。这里会省略掉具体的模型部署细节聚焦在Agent的核心编排逻辑上。3.1 第一步封装专业工具首先我们需要把那个强大的卡证检测矫正模型包装成一个Agent能调用的标准“工具”。这个工具通常是一个API接口。# 工具函数示例调用卡证检测矫正服务 import requests import json def process_card_document(image_path: str, doc_type: str id_card) - dict: 调用卡证检测矫正模型API。 参数: image_path: 上传的证件图片路径或Base64编码。 doc_type: 证件类型如 id_card_front, id_card_back, bank_card。 返回: 包含矫正后图像和信息字段的字典。 # 1. 准备请求数据这里以Base64为例 with open(image_path, rb) as f: image_data base64.b64encode(f.read()).decode(utf-8) payload { image: image_data, doc_type: doc_type } # 2. 调用模型服务API假设端点地址为 http://your-model-service/detect try: response requests.post(http://your-model-service/detect, jsonpayload, timeout10) response.raise_for_status() result response.json() # 3. 解析返回结果 if result[code] 0: # 返回结构化的信息 return { success: True, corrected_image: result[data][corrected_image_url], # 矫正后的图 fields: result[data][fields] # 如 {name: 张三, number: 110101...} } else: return {success: False, error: result[msg]} except Exception as e: return {success: False, error: str(e)} # 示例将这个函数定义为Agent可用的工具 tools_for_agent [ { type: function, function: { name: process_id_card, description: 检测、矫正用户上传的身份证图片并提取姓名、身份证号、有效期等关键字段。, parameters: { type: object, properties: { image_data: {type: string, description: 身份证图片的Base64编码字符串}, side: {type: string, enum: [front, back], description: 身份证正面或反面} }, required: [image_data, side] } } }, # 可以类似定义 process_bank_card 等工具 ]3.2 第二步构建智能体与工作流接下来我们用框架来创建Agent赋予它“大脑”和“工具箱”。# 以简化的伪代码示意Agent工作流 class AccountOpeningAgent: def __init__(self, llm_client): self.llm llm_client self.conversation_history [] # 维护对话历史 self.uploaded_images {} # 暂存用户上传的图片key为文档类型 def handle_user_message(self, user_input, uploaded_filesNone): 处理用户输入的核心方法 # 1. 如果有文件上传先存储起来 if uploaded_files: for file in uploaded_files: # 简单起见假设用户在上传时通过对话指明了类型如“这是我的身份证正面” # 实际中可能需要更复杂的逻辑或让LLM判断 self.uploaded_images[id_card_front] file # 2. 将对话历史和当前输入组合发送给LLM并告知可用的工具 messages self._build_messages_with_history(user_input) # 3. LLM进行推理决定是直接回复还是调用工具 response self.llm.chat.completions.create( modelgpt-4, # 或其它LLM messagesmessages, toolstools_for_agent, # 传入工具描述 tool_choiceauto, # 让LLM自行决定是否调用工具 ) llm_message response.choices[0].message # 4. 检查LLM是否决定调用工具 if llm_message.tool_calls: # 5. 执行工具调用 tool_call llm_message.tool_calls[0] function_name tool_call.function.name function_args json.loads(tool_call.function.arguments) if function_name process_id_card: # 从暂存区获取对应的图片数据 image_data self._get_image_data(function_args[side]) # 调用我们封装好的工具函数 tool_result process_card_document(image_data, doc_typefid_card_{function_args[side]}) # 6. 将工具执行结果作为新的上下文再次发送给LLM messages.append(llm_message) # 添加LLM要求调用工具的消息 # 添加工具执行结果的消息 messages.append({ role: tool, tool_call_id: tool_call.id, content: json.dumps(tool_result), }) # 获取LLM整合工具结果后的最终回复 second_response self.llm.chat.completions.create( modelgpt-4, messagesmessages, ) final_reply second_response.choices[0].message.content else: final_reply 暂不支持该工具调用。 else: # LLM直接生成了回复 final_reply llm_message.content # 7. 更新对话历史并返回最终回复 self.conversation_history.append({role: user, content: user_input}) self.conversation_history.append({role: assistant, content: final_reply}) return final_reply def _build_messages_with_history(self, new_input): 构建包含系统指令、历史对话和当前输入的messages列表 system_prompt 你是一个专业的金融开户审核助手。你的任务是引导用户完成开户流程并自动处理用户上传的身份证、银行卡等证件图片。 你可以调用工具来处理这些图片提取信息。请用友好、专业的态度与用户交流。 messages [{role: system, content: system_prompt}] messages.extend(self.conversation_history[-6:]) # 携带最近几轮历史 messages.append({role: user, content: new_input}) return messages def _get_image_data(self, side): 根据证件类型和正反面获取图片数据示例简化 key fid_card_{side} return self.uploaded_images.get(key, )3.3 第三步运行与效果体验当我们运行这个Agent并与它交互时整个过程在后台的日志或控制台中会呈现出清晰的思维链用户: “你好我想申请一张储蓄卡。” Agent(思考): 用户意图是“开户”。需要启动开户流程。第一步是收集身份证信息。 Agent(回复): “好的很高兴为您办理开户。首先请上传您的身份证正面照片。” 用户: [上传图片] Agent(思考): 用户上传了一张图片可能是身份证正面。我应该调用‘process_id_card’工具来处理它参数side设为‘front’。 Agent(行动): 调用工具 process_id_card(image_data..., sidefront) 工具返回: {success: True, fields: {name: 李四, id_number: ...}} Agent(思考): 工具成功提取了信息。我需要确认收到并请求下一张。 Agent(回复): “已收到您的身份证正面信息。请上传身份证反面照片。” ...后续流程类似...最终用户无需手动输入任何长串号码Agent就能自动填充好申请表单大幅提升体验和效率。4. 关键考量与优化方向把原型跑起来只是第一步真要放到实际业务中去用还有一些关键问题得想清楚。准确性是第一生命线卡证检测模型的精度必须极高。特别是身份证号、银行卡号一个数字错了就是大问题。除了选用高精度模型还需要在Agent流程中加入复核环节。比如让LLM将提取的信息组织成一句话让用户确认“为您填写的身份证号是11010119900307****请确认是否正确”或者对于银行卡号在后台用Luhn算法做一次校验。处理复杂与异常情况用户可能上传非证件图片、上传多张图、图片质量极差。Agent需要具备鲁棒性。在工具调用失败时LLM应该能理解错误信息如“工具调用失败图片中未检测到证件”并转化为用户能理解的引导“抱歉未识别到有效身份证件请重新拍摄一张清晰、完整的照片上传”。流程的灵活性与可控性开户流程可能因地区、产品而异。最好将业务流程逻辑先收什么后收什么校验什么规则外置成配置或知识库让LLM根据不同的业务类型去读取和执行而不是硬编码在Agent的思维里。这样变更流程时调整配置即可无需修改Agent核心代码。安全与隐私证件信息极度敏感。必须确保图片传输、处理、存储的全链路加密并在信息提取完成后及时安全地删除原始图片数据。Agent本身也应设定严格的操作边界只处理与当前业务明确相关的指令。5. 总结回过头来看我们通过让AI Agent掌握“工具调用”的能力确实为像金融开户审核这样的垂直场景打开了一扇新的大门。它不再是一个只会聊天的对话机器人而是一个能真正“动手做事”的智能助手。这种模式的核心价值在于**“融合”**用大语言模型的通用理解、规划和沟通能力去调度那些在特定任务上做到极致的垂直模型。LLM是“总经理”负责协调和决策垂直模型是“技术专家”负责攻坚克难。两者结合实现了112的效果。从更广的视角看卡证检测只是其中一个例子。任何有明确步骤、需要调用外部API或专业模型来完成的任务流程都可以尝试用Agent来重构。比如智能客服自动查询订单、生成工单、内容创作自动配图、排版、发布、数据分析自动取数、生成图表和报告等等。当然现在的Agent技术还在快速发展中在复杂逻辑的可靠性、长流程的稳定性方面还需要不断打磨。但毫无疑问它代表了一个非常值得探索的方向让AI更主动、更智能地融入我们的工作流去处理那些繁琐、重复但又有一定复杂性的任务。如果你正在为某个重复性的业务流程头疼不妨想想能不能把它拆解成“理解-规划-调用工具-执行”的步骤。也许一个简单的Agent就能帮你和你的团队从枯燥的劳动中解放出来。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。