基于推理的智能RAG、多智能体系统与视觉处理
在2025年,最先进的系统已不再依赖单一的大型通用模型。相反,它们采用多个不同规模和专业领域的大语言模型(LLMs),每个模型如同专家团队中的专业成员,协同处理复杂问题。
然而,在如此架构中正确评估一个LLM在其特定角色中的表现极具挑战性,因为需要在其被使用的具体环境中直接进行测试。

LLM决策管道(由Fareed Khan创建)
我们将构建三个独立的、生产级的AI管道,并将其作为测试平台来衡量不同模型在其指定角色中的表现。我们的评估框架基于三个核心原则:
- 角色特定测试:我们根据模型在管道中被分配的具体任务来评估其表现,无论是快速路由器、深度推理器还是精确评判器。
- 真实场景验证:我们不仅停留在抽象测试层面,而是让模型经历完整的端到端工作流程,以观察其在真实条件下的表现。
- 全面测量:我们将测量所有重要指标,从运营成本、延迟等运营指标到忠实性、相关性和科学有效性等定性评分。
所有代码(理论+3个notebook)均可在我的GitHub仓库中获取:
https://github.com/FareedKhan-dev/best-llm-finder-pipeline
代码库组织结构如下:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(linebest-llm-finder-pipeline/├── 01_agentic_RAG.ipynb # 智能RAG├── 02_multi_agent_system.ipynb # 多智能体系统├── 03_vision_reasoning.ipynb # 视觉推理├── README.md # 项目文档└── requirements.txt # 依赖项
我们为每个组件选择合适LLM的评估策略分为三个真实案例
用于深度文档分析的智能RAG
基于智能体的RAG系统已成为AI领域中基于LLM的新流行解决方案,特别适用于处理大规模非结构化文档的理解挑战。
按回车键或点击查看完整尺寸图像

智能RAG(由Fareed Khan创建)
在这种架构中,LLM被用于不同部分以使整个系统运作(评估LLM的正确方式),从路由和检索到合成和评估。
我们将避免预索引(如基于嵌入的RAG),而是让智能体即时阅读文档,测试LLM的深度和感知能力。
按回车键或点击查看完整尺寸图像

智能RAG管道(由Fareed Khan创建)
- 我们首先加载一个大型文档,并将其分割成少量的大型高级块。这为智能体创建了一个顶层地图以供导航,避免了耗时的预嵌入步骤。
- 然后我们创建一个路由器智能体,基于小型快速的LLM,快速浏览这些大块以识别最相关的部分。
- 系统重复地获取选定的部分,将其分割成更小的子块,并重新路由。这种放大过程允许智能体逐步聚焦于最有前景的信息。
- 一旦隔离出最相关的段落,我们使用强大的合成器智能体来构建详细答案,确保每个陈述都包含对其来源的精确引用。
- 最后,我们实施一个评估智能体,作为公正的评判者,对最终答案的忠实性和相关性进行评分,提供定量置信度评分以及其他评估指标。
让我们开始构建这个管道。
设置RAG环境
在开始编码之前,我们需要导入在整个RAG管道中有用的必要库。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport os # 与操作系统交互import json # 处理JSON数据import re # 正则表达式操作import time # 时间相关函数from io import BytesIO # 处理内存中的二进制流from openai import OpenAI # OpenAI客户端库from pypdf import PdfReader # 用于从PDF文件中读取和提取文本from typing import List, Dict, Any # 类型提示以提高代码清晰度
我们将通过OpenAI兼容的API提供商使用开源LLM。我正在使用Nebius AI,但您可以轻松切换到本地提供商如Ollama或其他云服务如Together AI。
由于我没有强大的本地GPU,云服务是访问各种模型的最佳方式(他们确实提供免费额度)。让我们初始化API客户端。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# --- LLM配置 ---# 替换为您的API密钥和LLM提供商的基础URLAPI_KEY = "YOUR_API_KEY" # 替换为您的实际密钥BASE_URL = "https://api.studio.nebius.com/v1/" # 或者您的Ollama/本地主机
# 初始化OpenAI客户端以连接到自定义端点client = OpenAI( api_key=API_KEY, base_url=BASE_URL,)
# 我们将在此处存储整个运行过程中的性能指标metrics_log = []
我们还初始化了一个空列表metrics_log,这对我们的评估阶段很重要,因为它将存储我们进行的每个LLM调用的详细性能数据。
我们策略的一个关键部分是为不同任务使用不同的模型。
通用智能RAG管道通常由至少三个AI驱动的组件组成,我们可以通过为每个组件选择合适的模型来优化成本和性能。
- 路由:此任务涉及浏览大量文本以查找相关部分。较小、更快的模型(如8B模型)通常足够且极具成本效益。
- 合成:此任务需要深度理解并能够将来自多个来源的信息组合成连贯的答案。更大、更强大的模型(如70B模型)是更好的选择。
- 评估:为了可靠地评判其他模型的质量,我们需要一个高度能力的"评判"模型。为此最终检查使用顶级模型可确保我们的质量评分值得信赖。
ounter(lineounter(lineounter(lineounter(line# 定义用于不同任务的模型ROUTER_MODEL = "meta-llama/Meta-Llama-3.1-8B-Instruct" # 用于路由的快速模型SYNTHESIS_MODEL = "meta-llama/Llama-3.3-70B-Instruct" # 用于合成的强大模型EVALUATION_MODEL = "deepseek-ai/DeepSeek-V3" # 用于评估的顶级模型
现在我们已初始化核心组件,可以继续加载和预处理我们的数据。

为了正确评估我们的模型,我们需要一个具有挑战性的数据集。为此,我们将使用[商标审判和上诉委员会程序手册(TBMP)](https://www.uspto.gov/sites/default/files/documents/tbmp-Master-June2024.pdf),这是一个密集的920页法律文档。它可免费下载,让我们编写一个函数来获取它并提取其文本。
按回车键或点击查看完整尺寸图像

TBMP文档(由Fareed Khan创建)
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef download_and_extract_text_from_pdf(url: str) -> str: """ 从给定的URL下载PDF并提取其文本内容。 返回提取的文本作为字符串。 """ try: response = requests.get(url) response.raise_for_status() # 如果下载出现问题则引发异常
# 使用BytesIO从下载的内容创建类似文件的对象 pdf_file = BytesIO(response.content)
# 初始化PDF阅读器 pdf_reader = PdfReader(pdf_file)
# 从所有页面提取文本 text = "" for page in pdf_reader.pages: text += page.extract_text() or "" # 如果页面为空则处理None
return text
except Exception as e: print(f"下载或处理PDF时出错: {e}") return ""
# 使用TBMP PDF的URLTBMP_URL = "https://www.uspto.gov/sites/default/files/documents/tbmp-Master-June2024.pdf"
# 下载并提取文本print("正在下载TBMP文档...")tbmp_text = download_and_extract_text_from_pdf(TBMP_URL)
# 检查结果print(f"成功提取{len(tbmp_text)}个字符的文本。")
运行此代码将下载920页的商标程序手册,为我们提供一个密集、具有挑战性的数据集来测试我们的RAG系统。
创建双通道路由器智能体
现在我们有了原始文本,需要将其分割成可管理的块。我们不是创建数百个小的嵌入向量,而是创建少量大的、高层次的块。这种方法允许我们的路由器智能体快速浏览文档结构,而不会陷入细节。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef split_text_into_large_chunks(text: str, chunk_size: int = 10000) -> List[str]: """ 将文本分割成指定字符大小的大块。 尝试在句子边界处分割以保持可读性。 """ # 简单地在chunk_size附近的最后一个空格处分割 chunks = [] start = 0
while start < len(text): # 找到chunk_size附近的最后一个空格 end = start + chunk_size if end >= len(text): chunks.append(text[start:]) break
# 向后查找最后一个空格 last_space = text.rfind(' ', start, end) if last_space == -1: last_space = end
chunks.append(text[start:last_space]) start = last_space + 1
return chunks
# 将TBMP文本分割成大的、高层次的块print("正在将文档分割成大的、高层次的块...")large_chunks = split_text_into_large_chunks(tbmp_text, chunk_size=15000)print(f"创建了{len(large_chunks)}个大块。")
现在我们有了文档块,让我们创建路由器智能体。这是一个轻量级的LLM,其工作是快速浏览这些大块并识别最相关的部分。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef create_router_agent(model_name: str) -> callable: """ 创建一个路由器智能体函数,该函数使用指定的模型 根据查询识别最相关的文档块。 """ def router_agent(query: str, chunks: List[str]) -> List[int]: """ 根据查询返回最相关块的索引列表。 """ prompt = f"""您是一个文档路由器。您的任务是识别哪些文档块与用户的查询最相关。
用户查询:{query}
文档块: {chr(10).join([f"块{i+1}: {chunk[:500]}..." for i, chunk in enumerate(chunks)])}
返回一个JSON对象,格式为:{{"relevant_chunks": [1, 3, 5]}} 仅包含高度相关的块的索引(从1开始)。 """
messages = [{"role": "user", "content": prompt}]
# 记录指标 start_time = time.time()
response = client.chat.completions.create( model=model_name, messages=messages, temperature=0.1 )
# 计算指标 latency = time.time() - start_time tokens = response.usage.total_tokens
# 解析响应 content = response.choices[0].message.content try: result = json.loads(content) relevant_indices = [i-1 for i in result["relevant_chunks"]] # 转换为0索引 except: relevant_indices = []
# 记录指标 metrics_log.append({ "stage": "routing", "model": model_name, "latency_s": latency, "tokens": tokens, "cost_usd": (tokens / 1000000) * 0.1 # 假设8B模型的价格 })
return relevant_indices
return router_agent
# 创建路由器智能体router = create_router_agent(ROUTER_MODEL)
# 测试路由器test_query = "商标异议的程序是什么?"relevant_chunk_indices = router(test_query, large_chunks)print(f"路由器识别出{len(relevant_chunk_indices)}个相关块。")
构建递归导航器
路由器给了我们一个良好的开端,但我们现在需要放大。我们将获取路由器识别的相关块,将它们分割成更小的子块,然后重复该过程。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef recursive_navigator(query: str, chunks: List[str], depth: int = 2) -> List[str]: """ 递归地缩小到最相关的段落。 深度控制递归级别数。 """ current_chunks = chunks relevant_chunks = current_chunks
for level in range(depth): print(f"导航级别{level+1}...")
# 将当前块分割成更小的子块 smaller_chunks = [] for chunk in relevant_chunks: sub_chunks = split_text_into_large_chunks(chunk, chunk_size=3000) smaller_chunks.extend(sub_chunks)
if not smaller_chunks: break
# 在这些较小的块上运行路由器 router = create_router_agent(ROUTER_MODEL) relevant_indices = router(query, smaller_chunks)
if not relevant_indices: break
relevant_chunks = [smaller_chunks[i] for i in relevant_indices]
return relevant_chunks
# 运行递归导航器final_relevant_chunks = recursive_navigator(test_query, [large_chunks[i] for i in relevant_chunk_indices])print(f"递归导航后最终识别出{len(final_relevant_chunks)}个高度相关的段落。")
用于可引用答案的合成器智能体
现在我们有了最相关的段落,让我们使用更强大的模型来合成一个带有精确引用的详细答案。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef create_synthesizer_agent(model_name: str) -> callable: """ 创建一个合成器智能体,该智能体使用指定的模型 基于检索到的段落生成带有引用的详细答案。 """ def synthesizer_agent(query: str, relevant_chunks: List[str]) -> Dict[str, Any]: """ 基于检索到的块生成带有引用的详细答案。 """ context = "\n\n".join([f"段落{i+1}:{chunk}" for i, chunk in enumerate(relevant_chunks)])
prompt = f"""您是一个文档合成器。基于提供的文档段落,创建一个详细、准确的答案。 每个事实陈述都必须包含对其来源段落的引用。
用户查询:{query}
相关文档段落: {context}
提供一个JSON响应,格式为: {{ "answer": "详细答案,每个事实都有[段落X]引用", "confidence": 0.0-1.0, "sources": ["段落1", "段落2", ...] }} """
messages = [{"role": "user", "content": prompt}]
# 记录指标 start_time = time.time()
response = client.chat.completions.create( model=model_name, messages=messages, temperature=0.2 )
# 计算指标 latency = time.time() - start_time tokens = response.usage.total_tokens
# 解析响应 content = response.choices[0].message.content try: result = json.loads(content) except: result = {"answer": content, "confidence": 0.5, "sources": []}
# 记录指标 metrics_log.append({ "stage": "synthesis", "model": model_name, "latency_s": latency, "tokens": tokens, "cost_usd": (tokens / 1000000) * 0.5 # 假设70B模型的价格 })
return result
return synthesizer_agent
# 创建合成器智能体synthesizer = create_synthesizer_agent(SYNTHESIS_MODEL)
# 生成答案synthesized_answer = synthesizer(test_query, final_relevant_chunks)print("合成答案:")print(synthesized_answer["answer"])print(f"置信度:{synthesized_answer['confidence']}")
LLM作为评判器(忠实性、检索、相关性)评估
现在我们有了答案,让我们使用顶级模型作为评判器来评估其质量。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef create_evaluation_agent(model_name: str) -> callable: """ 创建一个评估智能体,该智能体使用指定的模型 评估生成的答案的质量。 """ def evaluation_agent(query: str, answer: str, context: List[str]) -> Dict[str, float]: """ 评估答案的忠实性、相关性和检索质量。 返回包含评分的字典。 """ context_text = "\n\n".join(context)
prompt = f"""您是一个公正的评判者。评估提供的答案相对于用户查询和源文档的质量。
用户查询:{query}
生成的答案:{answer}
源文档段落:{context_text}
评估以下方面并提供0-1的评分: 1. 忠实性:答案是否准确反映源文档? 2. 相关性:答案是否直接解决用户查询? 3. 检索质量:是否使用了最相关的源段落?
返回JSON格式:{{"faithfulness": 0.0, "relevance": 0.0, "retrieval": 0.0}} """
messages = [{"role": "user", "content": prompt}]
# 记录指标 start_time = time.time()
response = client.chat.completions.create( model=model_name, messages=messages, temperature=0.0 )
# 计算指标 latency = time.time() - start_time tokens = response.usage.total_tokens
# 解析响应 content = response.choices[0].message.content try: scores = json.loads(content) except: scores = {"faithfulness": 0.5, "relevance": 0.5, "retrieval": 0.5}
# 记录指标 metrics_log.append({ "stage": "evaluation", "model": model_name, "latency_s": latency, "tokens": tokens, "cost_usd": (tokens / 1000000) * 0.8 # 假设DeepSeek-V3的价格 })
return scores
return evaluation_agent
# 创建评估智能体evaluator = create_evaluation_agent(EVALUATION_MODEL)
# 评估答案quality_scores = evaluator(test_query, synthesized_answer["answer"], final_relevant_chunks)print("质量评分:")for metric, score in quality_scores.items(): print(f"{metric}: {score:.2f}")
成本和置信度评估
让我们整合所有指标,创建成本和性能的完整画面。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport pandas as pd
# 创建指标摘要if metrics_log: df_metrics = pd.DataFrame(metrics_log)
# 计算总成本(使用示例定价) total_cost = df_metrics['cost_usd'].sum() total_latency = df_metrics['latency_s'].sum() total_tokens = df_metrics['tokens'].sum()
# 创建摘要 summary = { '总延迟(秒)': f"{total_latency:.2f}", '总成本(美元)': f"${total_cost:.6f}", '总令牌数': f"{total_tokens:,}", '平均忠实性评分': f"{quality_scores.get('faithfulness', 0):.2f}", '平均相关性评分': f"{quality_scores.get('relevance', 0):.2f}", '平均检索评分': f"{quality_scores.get('retrieval', 0):.2f}", '合成置信度': f"{synthesized_answer.get('confidence', 0):.2f}" }
print("\n=== 智能RAG管道性能摘要 ===") for key, value in summary.items(): print(f"{key}: {value}")
用于科学研究的多智能体系统
我们的第二个管道模拟了一个多智能体科学研究系统,其中不同的LLM扮演不同的角色——从生成假设的构思智能体到评估安全性的关键审查器。
按回车键或点击查看完整尺寸图像

工具使用推理(由Fareed Khan创建)
配置共同科学家和模拟实验室工具
首先,让我们设置我们的"共同科学家"——一个能够使用工具收集信息、分析数据并生成研究假设的智能体。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# --- 模拟实验室工具 ---def search_literature(query: str) -> str: """模拟文献搜索功能。""" if "CRISPR" in query: return "最新CRISPR研究显示在基因编辑精度方面取得进展,但脱靶效应仍然是一个挑战。" return "在文献中未找到相关信息。"
def analyze_data(experiment_type: str) -> str: """模拟数据分析功能。""" if "gene_expression" in experiment_type: return "基因表达分析显示处理组和对照组之间有2.3倍的显著差异(p<0.01)。" return "分析完成,未观察到显著效果。"
def check_safety(protocol: str) -> str: """模拟安全检查功能。""" if "viral_vector" in protocol.lower(): return "警告:病毒载体需要BSL-2安全等级和机构审查委员会批准。" return "协议符合标准安全指南。"
# 工具调度器LAB_TOOLS = { "search_literature": search_literature, "analyze_data": analyze_data, "check_safety": check_safety}
构建核心智能体运行器
现在让我们创建一个能够并行运行多个构思智能体的系统。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef create_ideation_agent(model_name: str, agent_id: str) -> callable: """ 创建一个构思智能体,该智能体可以生成研究假设并使用实验室工具。 """ def ideation_agent(research_topic: str, context: Dict[str, Any]) -> Dict[str, Any]: """ 基于研究主题和可用工具生成研究假设。 """ prompt = f"""您是一个AI研究科学家(智能体{agent_id})。您的任务是生成关于{research_topic}的新颖研究假设。
您可以使用以下工具: - search_literature:查找相关研究 - analyze_data:分析实验数据 - check_safety:验证协议安全性
首先分析现有文献,然后提出3个可测试的假设。 对每个假设,提供: 1. 简要描述 2. 预期结果 3. 所需实验 4. 潜在影响
使用可用的工具来指导您的假设生成。 """
messages = [ {"role": "system", "content": prompt}, {"role": "user", "content": f"研究主题:{research_topic}"} ]
# 允许工具使用 for step in range(5): response = client.chat.completions.create( model=model_name, messages=messages, tools=get_tool_manifest(), tool_choice="auto" )
message = response.choices[0].message messages.append(message)
if message.tool_calls: for tool_call in message.tool_calls: function_name = tool_call.function.name arguments = json.loads(tool_call.function.arguments) result = LAB_TOOLS[function_name](**arguments) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": result }) else: break
# 提取最终假设 final_response = client.chat.completions.create( model=model_name, messages=messages, temperature=0.7 )
# 记录指标 metrics_log.append({ "stage": "ideation", "model": model_name, "agent_id": agent_id, "latency_s": response.usage.total_tokens / 100, # 近似值 "tokens": response.usage.total_tokens, "cost_usd": (response.usage.total_tokens / 1000000) * 0.15 })
return { "agent_id": agent_id, "hypotheses": final_response.choices[0].message.content, "model_used": model_name }
return ideation_agent
# 创建多个构思智能体ideation_agents = [ create_ideation_agent("meta-llama/Llama-3.1-8B-Instruct", "agent_1"), create_ideation_agent("meta-llama/Llama-3.1-8B-Instruct", "agent_2"), create_ideation_agent("Qwen/Qwen3-14B", "agent_3")]实施锦标赛排名智能体
实施锦标赛排名智能体
让我们创建一个智能体来评估和排名不同构思智能体生成的假设。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef create_tournament_ranking_agent(model_name: str) -> callable: """ 创建一个智能体,该智能体使用锦标赛风格评估来排名研究假设。 """ def ranking_agent(hypotheses: List[Dict[str, Any]]) -> Dict[str, Any]: """ 评估和排名来自多个智能体的假设。 """ all_hypotheses = [] for agent_result in hypotheses: all_hypotheses.append({ "agent_id": agent_result["agent_id"], "content": agent_result["hypotheses"] })
prompt = f"""您是一个研究总监。评估以下研究假设并对其进行排名。
提交的假设: {json.dumps(all_hypotheses, indent=2)}
基于以下标准评估每个假设: 1. 科学合理性(1-10) 2. 新颖性(1-10) 3. 可行性(1-10) 4. 潜在影响(1-10)
提供排名列表,包含总分和简要理由。 返回JSON格式:{{"rankings": [...]}} """
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create( model=model_name, messages=messages, temperature=0.1 )
# 记录指标 metrics_log.append({ "stage": "tournament_ranking", "model": model_name, "latency_s": response.usage.total_tokens / 100, "tokens": response.usage.total_tokens, "cost_usd": (response.usage.total_tokens / 1000000) * 0.3 })
try: rankings = json.loads(response.choices[0].message.content) except: rankings = {"rankings": []}
return rankings
return ranking_agent
# 创建排名智能体ranker = create_tournament_ranking_agent("meta-llama/Llama-3.3-70B-Instruct")
深度批判和安全检查智能体
让我们添加一个专门的批判智能体来评估顶级假设的安全性和有效性。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef create_critique_agent(model_name: str) -> callable: """ 创建一个批判智能体,该智能体评估研究假设的安全性和科学有效性。 """ def critique_agent(top_hypotheses: List[Dict[str, Any]]) -> Dict[str, Any]: """ 对顶级假设进行深度批判和安全分析。 """ prompt = f"""您是一个经验丰富的研究伦理委员会成员。对以下顶级研究假设进行深度批判。
需要评估的假设: {json.dumps(top_hypotheses, indent=2)}
提供: 1. 每个假设的安全风险评估 2. 伦理考虑 3. 方法论的潜在缺陷 4. 改进建议 5. 总体建议(批准/修改/拒绝)
返回JSON格式:{{"critiques": [...]}} """
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create( model=model_name, messages=messages, temperature=0.1 )
# 记录指标 metrics_log.append({ "stage": "critique", "model": model_name, "latency_s": response.usage.total_tokens / 100, "tokens": response.usage.total_tokens, "cost_usd": (response.usage.total_tokens / 1000000) * 0.5 })
try: critiques = json.loads(response.choices[0].message.content) except: critiques = {"critiques": []}
return critiques
return critique_agent
# 创建批判智能体critic = create_critique_agent("deepseek-ai/DeepSeek-V3")
运行完整的多智能体系统
让我们运行完整的科学研究管道。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 运行多智能体系统research_topic = "CRISPR基因编辑在治疗遗传疾病中的应用"
print("=== 运行多智能体科学研究系统 ===")print(f"研究主题:{research_topic}")
# 步骤1:并行运行构思智能体print("\n1. 运行并行构思智能体...")hypotheses = []for agent in ideation_agents: result = agent(research_topic, {}) hypotheses.append(result) print(f"智能体{result['agent_id']}完成")
# 步骤2:锦标赛排名print("\n2. 运行锦标赛排名...")rankings = ranker(hypotheses)print("排名完成")
# 步骤3:深度批判print("\n3. 运行深度批判...")top_hypotheses = [h for h in hypotheses if h['agent_id'] in [r.get('agent_id') for r in rankings.get('rankings', [])[:3]]]critiques = critic(top_hypotheses)print("批判分析完成")
# 显示结果print("\n=== 最终研究结果 ===")print(f"生成的假设数量:{len(hypotheses)}")print(f"排名前三的假设已识别")print(f"安全评估完成")
处理扫描质量较差表单的视觉推理
我们的第三个管道解决了从扫描质量较差的表单中提取结构化数据的现实挑战,使用专门的视觉模型进行OCR,然后使用推理模型进行数据清理。
设置两阶段组件
我们将创建一个两阶段管道:
- 阶段1:使用视觉模型进行高保真OCR
- 阶段2:使用工具推理模型进行优化
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 模拟OCR输出(在实际实现中,这将来自视觉模型)mock_ocr_output = { "applicant": { "name": "Smith, James L OR James L Smith", "email": "jsmithl@gmail.com OR j.smith@company.com" }, "risk_address": { "street": "855 Brannan St", "city": "San Francisco", "state": "CA", "zip": "", "county": "" }, "mailing_address_if_different_than_risk_address": { "street": "", "city": "", "state": "", "zip": "", "county": "" }, "policy_details": { "effective_date": "2024-01-15", "coverage_amount": "$500,000", "premium": "$2,500 annually" }}
使用视觉模型的高保真OCR
在实际实现中,这将使用像gemma-3-27b-it这样的视觉模型来处理图像并提取文本。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef run_ocr_stage(image_path: str) -> Dict[str, Any]: """ 使用视觉模型从表单图像中提取原始OCR数据。 在实际实现中,这将调用视觉模型API。 """ # 模拟视觉模型处理 print("正在使用视觉模型处理表单图像...")
# 记录指标 metrics_log.append({ "stage": "ocr_extraction", "model": "google/gemma-3-27b-it", "latency_s": 2.5, "tokens": 1500, "cost_usd": 0.0006 # 基于视觉模型定价 })
return mock_ocr_output
# 运行OCR阶段stage1_output = run_ocr_stage("insurance_form.jpg")print("阶段1 OCR输出:")print(json.dumps(stage1_output, indent=2))
使用工具推理模型进行优化
现在我们使用能够使用工具验证和完成数据的推理模型。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 为阶段2设置工具def validate_email(email: str) -> bool: """模拟函数以验证电子邮件。对于此演示,只有'jsmithl@gmail.com'有效。""" return email == "jsmithl@gmail.com"
def search_web(query: str) -> str: """模拟网络搜索功能以查找缺失的地址详细信息。""" if "855 Brannan St" in query: return "完整地址是855 Brannan St, San Francisco, CA 94103。位于旧金山县。" return "未找到信息。"
TOOL_DISPATCHER = {"validate_email": validate_email, "search_web": search_web}
def run_refinement_stage(ocr_data: Dict[str, Any]) -> Dict[str, Any]: """ 使用较小的、工具使用的LLM来清理、验证和完成原始OCR数据。 """ refinement_prompt = """您是数据验证专家。您已获得OCR系统的原始JSON。您的工作是清理、验证和完成它。 1. 检查每个字段是否存在歧义(例如,带有' OR '的文本)。使用工具解决它们。 2. 识别缺失信息(例如,'zip'的空字符串)。使用工具查找它。 3. 如果邮寄地址为空,假设它与风险地址相同。 4. 返回符合Pydantic模式的最终清理JSON对象。"""
messages = [ {"role": "system", "content": refinement_prompt}, {"role": "user", "content": f"这是需要优化的原始OCR数据:\n\n{json.dumps(ocr_data)}"} ]
# 如果需要,允许智能体进行多次工具调用 for i in range(5): response = client.chat.completions.create( model="Qwen/Qwen3-14B", messages=messages, tools=get_tool_manifest(), tool_choice="auto" ) msg = response.choices[0].message messages.append(msg)
if not msg.tool_calls: return json.loads(msg.content)
# 执行工具调用并将结果附加到对话 for tool_call in msg.tool_calls: function_name = tool_call.function.name args = json.loads(tool_call.function.arguments) result = TOOL_DISPATCHER[function_name](**args) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(result) })
return {"error": "超出工具调用限制。"}
# 运行管道的第二阶段stage2_output = run_refinement_stage(stage1_output)print("\n阶段2优化输出:")print(json.dumps(stage2_output, indent=2))
分析结果
转换效果良好。推理智能体成功使用其工具将模糊电子邮件解析为jsmithl@gmail.com,并执行网络搜索以填写缺失的邮政编码和县。
它还正确推断出邮寄地址与风险地址相同。结果是一个干净、完整且经验证的数据对象。
自动化质量保证(QA)智能体
作为最终组件,我们将编码一个自动化质量保证(QA)智能体。
该智能体基于我们的LLM充当评估器MODEL_EVALUATE,将作为审计员工作。它比较阶段1的原始、模糊输出与阶段2的干净、优化输出。其工作是提供详细报告,在多个维度上对过程进行评分,最重要的是标记可能仍需要人工审查的任何字段。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linedef evaluate_extraction_quality(raw_data: Dict, final_data: Dict) -> Dict: """ 使用强大的评估模型比较原始数据和优化数据,提供详细的质量报告。 """ eval_prompt = f"""您是质量保证专家。比较'原始OCR数据'与'最终优化数据'并提供详细评估作为JSON对象。
原始OCR数据: {json.dumps(raw_data, indent=2)}
最终优化数据: {json.dumps(final_data, indent=2)}
使用以下结构提供您的评估: {{ "field_accuracy_score": {{ "score": float (0.0-1.0), "justification": "评估最终数据是否准确保留所有原始、正确的信息。" }}, "inference_quality_score": {{ "score": float (0.0-1.0), "justification": "专门评估模型填写缺失或解决模糊字段的效果。" }}, "completeness_score": {{ "score": float (0.0-1.0), "justification": "计算最终数据中非空字段的比率。" }}, "overall_confidence_score": {{ "score": float (0.0-1.0), "justification": "您对最终数据正确性的整体信心。" }}, "fields_requiring_human_review": ["需要人工审查的字段名称列表", "这些字段看起来仍然不确定或信心不足"] }} """
messages = [{"role": "user", "content": eval_prompt}] response = client.chat.completions.create( model="Qwen/Qwen3-235B-A22B", messages=messages, temperature=0.0 )
# 记录指标 metrics_log.append({ "stage": "quality_assurance", "model": "Qwen/Qwen3-235B-A22B", "latency_s": response.usage.total_tokens / 50, "tokens": response.usage.total_tokens, "cost_usd": (response.usage.total_tokens / 1000000) * 0.6 })
return json.loads(response.choices[0].message.content)
# 运行最终评估阶段quality_assessment = evaluate_extraction_quality(stage1_output, stage2_output)print("\n阶段3自动化质量报告:")print(json.dumps(quality_assessment, indent=2))
这个最终评估步骤使管道具备生产就绪性。我们不是仅仅希望输出正确,而是以编程方式评估其质量并生成可操作的反馈,将我们的系统从黑盒转变为透明且可观察的过程。
分析我们的发现
跨越三个不同且具有挑战性的用例,我们已经超越了抽象基准并评估了开源LLM。让我们来看看我们的发现。
- 对于广泛、高吞吐量的任务(路由、构思):较小、更快的模型如
Qwen/Qwen3-4B-fast和Llama-3.1-8B-Instruct被证明是冠军。它们极具成本效益,其速度对于需要处理大量数据或生成许多并行输出的任务至关重要。在这些角色中,它们较低的推理能力并不是主要缺点。 - 对于专注的、逻辑性任务(安全、优化):中等规模的模型如
Qwen/Qwen3-14B达到了最佳平衡点。它们具有强大的指令遵循和工具使用能力,使其成为不需要旗舰模型深度理解的专业逻辑任务的完美选择。 - 对于深度、高风险的推理(合成、批判、评估):这是最大模型如
Qwen/Qwen3-235B-A22B、Llama-3.3-70B-Instruct和DeepSeek-V3不可或缺的地方。它们卓越的推理、合成和评估能力证明了当最终输出质量至关重要时,其更高的成本和延迟是合理的。 - 对于多模态感知(OCR):专门的视觉能力模型如
gemma-3-27b-it是必需的。这表明对于某些任务,关键选择标准不仅仅是规模,而是模型训练的基本模态。
关键要点
这篇博客中有很多信息,让我们快速总结最重要的几点。
- 没有单一最佳LLM:最有效的系统结合多个模型,使用更便宜的模型进行扩展,使用更昂贵的模型进行精确处理。
- 基于角色的选择:将模型分配给路由器、合成器或评判器等角色,而不是寻求一个万能的模型。
- 升级模式:从快速、低成本的模型开始以构建或过滤问题,然后将前景良好的案例升级到更强大的模型进行更深入的分析。
- 自动化评估:可靠的管道需要持续测量,使用顶级LLM作为评判器来评分质量并发现弱点。
- 可观察性:在统一视图中监控成本、延迟和定性指标对于优化、调试和展示价值至关重要。
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01 教学内容

-
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
-
大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。

vx扫描下方二维码即可

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03 入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:

04 视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05 行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!

06 90+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

652



被折叠的 条评论
为什么被折叠?



