news 2026/5/4 4:10:23

基于Groq与LangChain构建免费自主AI智能体:从原理到实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Groq与LangChain构建免费自主AI智能体:从原理到实战

1. 项目概述:当AI助手学会“自己动手,丰衣足食”

最近在折腾AI应用开发的朋友,估计都绕不开一个核心痛点:API调用成本。无论是OpenAI的GPT-4,还是Anthropic的Claude,每一次对话、每一次推理都在消耗真金白银的Token。对于个人开发者、小团队或者需要高频测试的场景,这笔开销不容小觑。更头疼的是,当你想构建一个能自主调用工具、联网搜索、处理复杂任务的智能体时,单次对话的成本和上下文长度限制,常常让项目在原型阶段就举步维艰。

就在这个背景下,我注意到了GitHub上一个名为“AutoGroq”的项目。初看标题,你可能会联想到那个提供高速推理API的服务商Groq,以及那个著名的AI智能体框架AutoGPT。没错,这个项目的核心思路,正是将两者结合,旨在创建一个能够利用Groq公司提供的免费、高速推理API,来自主运行复杂任务的AI智能体系统。简单来说,它试图让AI助手学会“自己动手”,利用免费资源来完成目标,从而为开发者“丰衣足食”——降低成本门槛。

这个想法非常吸引人。Groq以其LPU(语言处理单元)推理芯片闻名,能提供极低的延迟和极高的吞吐量,并且其云API目前有相当慷慨的免费额度。而AutoGPT所代表的“自主智能体”范式,允许AI根据目标自我规划、执行动作(如读写文件、搜索网页、执行代码)并迭代优化。将免费的高速算力赋予一个能自主行动的智能体,听起来就像是给一个聪明的助手配上了一台永不枯竭的发动机。

但理想很丰满,现实往往骨感。AutoGroq项目具体是如何实现的?它真的能稳定、可靠地运行复杂的多步任务吗?作为开发者,我们该如何部署、配置并让它为我们所用?更重要的是,在实际操作中会遇到哪些“坑”,又该如何规避?为了回答这些问题,我决定深入这个项目的代码仓库,进行一次从环境搭建到任务实战的完整探索,并将过程中的所有细节、心得和踩过的“雷”记录下来。

2. 核心架构与设计思路拆解

在动手部署之前,我们必须先理解AutoGroq究竟是如何工作的。它的设计哲学并非从零造轮子,而是站在巨人的肩膀上,进行巧妙的集成与适配。

2.1 技术栈选型:为何是这些组件?

打开项目的requirements.txtpyproject.toml文件,我们可以看到其核心依赖。一个典型的AutoGroq项目通常会构建在以下几个关键组件之上:

  1. LangChain / LangGraph:这是智能体(Agent)的“大脑”和“决策框架”。LangChain提供了构建基于大语言模型应用的标准化模块,而LangGraph尤其擅长描述有状态的、多步骤的工作流。AutoGroq利用它们来定义智能体的思考循环:分析目标、规划步骤、选择工具、执行动作、评估结果、继续或重新规划。这取代了早期AutoGPT中相对粗糙的递归提示工程,使得智能体的行为更加可控、可调试。

  2. Groq API Client:这是项目的“动力核心”。通过官方的groqPython库,项目能够以极低的成本调用Groq提供的各类模型,例如mixtral-8x7b-32768llama3-70b-8192等。选择Groq而非其他付费API,核心考量就是其免费额度推理速度。对于需要大量迭代对话的自主智能体来说,这两点至关重要。

  3. 工具集成(Tools):这是智能体的“手和脚”。一个只会空想的智能体毫无用处。AutoGroq通常会集成一系列工具,例如:

    • SerpAPIDuckDuckGoSearch:用于联网搜索,获取实时信息。
    • FileSystemTool:用于读写本地文件,管理项目结构。
    • PythonREPLTool:在一个安全的沙箱环境中执行Python代码,进行数据处理或计算。
    • RequestsToolkit:用于发送HTTP请求,与外部API交互。 这些工具通过LangChain的标准接口封装,智能体在决策时可以从工具列表中选择最合适的一个来调用。
  4. 记忆与状态管理:这是智能体的“短期记忆”。智能体需要记住之前做了什么、得到了什么结果,才能进行有效的下一步。AutoGroq通常会利用LangGraph的“状态”概念,在单个任务运行期间,将对话历史、工具执行结果、中间结论等保存在一个状态对象中,并在每一步传递给模型,确保上下文连贯。

注意:这里存在一个关键设计取舍。为了最大化利用Groq的免费额度并追求速度,项目通常不会使用昂贵的向量数据库来实现长期记忆。这意味着每次运行都是相对独立的,任务完成后记忆不会持久化。这对于完成特定、封闭的任务是高效的,但对于需要长期学习和积累知识的场景则不适合。

2.2 工作流解析:智能体如何一步步思考与行动?

理解了组件,我们再来看看它们是如何协同工作的。一个典型的AutoGroq智能体工作流可以概括为以下循环:

  1. 目标输入与初始化:用户提供一个自然语言描述的目标,如“研究一下量子计算的最新进展,并写一份摘要报告保存为Markdown文件”。系统初始化一个包含目标、空工具输出列表、空步骤历史的状态。

  2. 规划与工具选择:将当前状态(包含目标和历史)发送给Groq模型。模型被提示(Prompt)扮演一个“自主智能体”,需要分析当前情况,决定下一步是应该调用某个工具,还是已经可以给出最终答案。如果决定调用工具,它需要精确输出工具的名称和输入参数。

  3. 工具执行:系统解析模型的输出,找到对应的工具并传入参数执行。例如,模型可能输出{"action": "SearchWeb", "action_input": "quantum computing breakthrough 2024"},系统便会调用搜索工具进行查询。

  4. 结果观察与状态更新:工具执行的结果(如搜索到的网页摘要)被获取。系统将这个结果作为“观察”更新到状态中。此时,状态里包含了:原始目标、上一步的“行动”、以及这一步的“观察”。

  5. 循环判断:将更新后的状态再次送给模型。模型评估当前信息是否足以完成任务。如果不足,则回到步骤2,规划下一步;如果足够,则输出最终结论(如生成报告内容)。

  6. 最终输出与后处理:当模型决定任务完成时,它会输出最终答案。系统可能还会触发后处理动作,比如调用文件写入工具,将生成的报告保存到指定路径。

这个循环的核心在于“ReAct”(Reason + Act)模式:模型在“思考”下一步该做什么(Reason)和“描述”行动结果(Act)之间交替。LangGraph将这个循环图形化、结构化,使得整个流程更加清晰和易于管理。

3. 环境部署与核心配置实战

纸上谈兵终觉浅,绝知此事要躬行。接下来,我将带你一步步搭建一个可运行的AutoGroq环境。这里假设你使用的是Linux/macOS系统或WSL,并已安装Python 3.10+和Git。

3.1 基础环境搭建与依赖安装

首先,克隆项目仓库。由于“jgravelle/AutoGroq”可能是一个示例或特定实现,我们需要理解其通用结构。通常,这类项目会提供一个核心的智能体运行脚本。

# 1. 克隆项目(这里以假设的仓库结构为例) git clone <repository_url> cd AutoGroq # 2. 创建并激活虚拟环境(强烈推荐,避免依赖冲突) python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 3. 安装依赖 pip install -r requirements.txt # 如果项目没有requirements.txt,核心依赖通常包括: # pip install langchain langchain-groq langgraph duckduckgo-search

安装过程中最常见的坑是依赖版本冲突。LangChain生态更新频繁,不同版本间API可能有变化。如果运行时报错提示某个模块不存在或函数签名错误,第一反应是检查项目的requirements.txtpyproject.toml,锁定推荐版本。例如,明确指定langchain==0.1.0而非langchain

3.2 核心配置:API密钥与工具设置

环境就绪后,最关键的一步是配置。你需要准备几个关键的API密钥或访问令牌。

  1. Groq API密钥:这是项目的发动机燃油。

    • 访问 Groq Cloud 控制台 注册并登录。
    • 在API Keys页面,点击“Create API Key”生成一个新的密钥。
    • 重要:妥善保管此密钥,它就像你的信用卡密码。不要直接硬编码在脚本里,更不要上传到GitHub。
  2. 搜索API密钥(可选但推荐):如果智能体需要联网搜索。

    • SerpAPI:功能强大,结果结构化好,但免费额度有限,后续需付费。
    • DuckDuckGo Search:免费、无需密钥,但可能被某些网络环境限制,且结果稳定性不如商业API。
    • 根据你的需求选择。对于实验和轻度使用,DuckDuckGo通常足够。

配置方式通常是通过环境变量。我强烈建议使用.env文件来管理,并用python-dotenv加载。

# 在项目根目录创建 .env 文件 echo "GROQ_API_KEY=your_groq_api_key_here" > .env echo "SERPAPI_API_KEY=your_serpapi_key_here" >> .env # 如果使用SerpAPI

然后在你的Python主脚本中,这样加载和使用:

import os from dotenv import load_dotenv from langchain_groq import ChatGroq load_dotenv() # 加载 .env 文件中的环境变量 # 初始化Groq模型 llm = ChatGroq( groq_api_key=os.getenv("GROQ_API_KEY"), model_name="mixtral-8x7b-32768", # 推荐模型,上下文长,免费 temperature=0.1, # 对于任务执行,低温度更稳定,减少随机性 max_tokens=32768 # 充分利用模型的长上下文优势 )

参数选择心得

  • model_namemixtral-8x7b-32768llama3-70b-8192是Groq上最受欢迎的两个免费模型。Mixtral是混合专家模型,在多任务处理上表现均衡;Llama 3 70B则在复杂推理和指令遵循上可能更强。可以根据任务类型切换测试。
  • temperature:设置为0.1-0.3之间。自主智能体需要稳定、可预测的输出格式来解析工具调用,过高的温度会导致输出混乱,无法解析。
  • max_tokens:根据模型的最大上下文设置。这决定了单次请求能处理多少历史对话和工具输出。对于长任务,设置足够大很重要。

3.3 工具链的集成与测试

配置好模型后,需要实例化智能体可用的工具。这里以集成DuckDuckGo搜索和文件系统工具为例。

from langchain_community.tools import DuckDuckGoSearchRun, FileReadTool, FileWriteTool from langchain_experimental.tools import PythonREPLTool # 初始化工具 search = DuckDuckGoSearchRun() read_tool = FileReadTool() write_tool = FileWriteTool() python_repl = PythonREPLTool() # 将工具包装成列表,供智能体使用 tools = [search, read_tool, write_tool, python_repl] # 为每个工具设置清晰的描述,这至关重要! # 模型的“思考”依赖于工具的描述来决定调用哪个。 search.description = ( "A search engine. Useful for when you need to answer questions about current events or find recent information. " "Input should be a search query string." ) write_tool.description = ( "Write content to a file. Useful for saving results, reports, or code. " "Input should be a dictionary with keys 'file_path' and 'text'." )

关键技巧:工具描述(description)是智能体能否正确使用工具的生命线。描述必须清晰、无歧义地说明工具的用途、适用场景以及输入格式。我习惯在描述中直接给出输入示例,比如Input should be a search query string.。花时间精心编写每个工具的描述,能极大提升智能体规划动作的准确性。

完成以上步骤后,一个基础的、可运行的AutoGroq智能体环境就搭建好了。接下来,我们将进入最激动人心的部分:设计并运行一个真实任务。

4. 任务实战:构建一个研究型智能体

为了全面测试AutoGroq的能力,我设计了一个中等复杂度的任务:“调研LangGraph框架的最新特性(2024年以来),并生成一份包含代码示例的简要技术报告,保存为langgraph_report.md

这个任务综合了信息搜索、信息整合、代码生成和文件操作,非常适合检验智能体的多步骤协作能力。

4.1 定义智能体与工作流

我们将使用LangGraph来构建一个ReAct风格的工作流。以下是核心代码结构:

from typing import TypedDict, Annotated, List import operator from langgraph.graph import StateGraph, END from langchain_core.messages import HumanMessage, AIMessage, ToolMessage from langchain_core.prompts import ChatPromptTemplate # 1. 定义状态结构 class AgentState(TypedDict): messages: Annotated[List, operator.add] # 消息历史 goal: str # 用户目标 # 2. 创建模型绑定工具的“执行器” llm_with_tools = llm.bind_tools(tools) # 3. 定义提示词 system_prompt = """You are a highly capable autonomous research assistant. Your goal is to accomplish the task given by the user. You have access to the following tools: {tool_descriptions}. Always think step by step. If you need to use a tool, output a JSON object strictly in the following format: {{ "tool": "<tool_name>", "tool_input": <tool_input_parameters> }} If you have enough information to provide a final answer to the user's goal, output your final answer directly. Your final answer should be comprehensive and well-structured. """ prompt = ChatPromptTemplate.from_messages([ ("system", system_prompt), ("placeholder", "{messages}") # LangGraph会自动填充消息历史 ]) # 4. 定义节点函数 def agent_node(state: AgentState): """智能体决策节点""" # 构建提示词 formatted_prompt = prompt.invoke({ "tool_descriptions": "\n".join([f"- {t.name}: {t.description}" for t in tools]), "messages": state["messages"], "goal": state["goal"] }) # 调用模型 response = llm_with_tools.invoke(formatted_prompt) # 将模型响应添加到消息历史 return {"messages": [response]} def tool_node(state: AgentState): """工具执行节点""" last_message = state["messages"][-1] tool_calls = last_message.tool_calls # 获取模型请求调用的工具 if not tool_calls: raise ValueError("No tool calls found in the last message.") tool_messages = [] for tool_call in tool_calls: tool_name = tool_call['name'] tool_input = tool_call['args'] # 根据名称找到对应的工具对象 selected_tool = next((t for t in tools if t.name == tool_name), None) if not selected_tool: tool_messages.append(ToolMessage(content=f"Error: Tool {tool_name} not found.", tool_call_id=tool_call['id'])) continue # 执行工具 try: output = selected_tool.invoke(tool_input) tool_messages.append(ToolMessage(content=str(output), tool_call_id=tool_call['id'], name=tool_name)) except Exception as e: tool_messages.append(ToolMessage(content=f"Error executing {tool_name}: {str(e)}", tool_call_id=tool_call['id'])) return {"messages": tool_messages} # 5. 构建图 workflow = StateGraph(AgentState) # 添加节点 workflow.add_node("agent", agent_node) workflow.add_node("tools", tool_node) # 设置入口点 workflow.set_entry_point("agent") # 定义边:智能体之后,根据输出决定下一步 def route_after_agent(state: AgentState): last_message = state["messages"][-1] if last_message.tool_calls: return "tools" # 如果模型请求调用工具,则转向工具节点 else: return END # 如果模型直接给出最终答案,则结束 workflow.add_conditional_edges( "agent", route_after_agent, {"tools": "tools", END: END} ) # 工具执行完后,总是回到智能体进行下一步思考 workflow.add_edge("tools", "agent") # 编译图 app = workflow.compile()

这段代码构建了一个完整的ReAct循环图。agent_node负责思考并决定行动(调用工具或直接回答),tool_node负责执行具体的工具调用。两者通过route_after_agent函数连接,形成一个闭环。

4.2 运行任务与过程观察

现在,让我们运行这个智能体,并观察它的思考过程。

# 初始化状态 initial_state = AgentState( messages=[HumanMessage(content="调研LangGraph框架的最新特性(2024年以来),并生成一份包含代码示例的简要技术报告,保存为`langgraph_report.md`。")], goal="调研LangGraph并生成报告" ) # 运行图,设置最大迭代次数防止无限循环 max_steps = 15 for step, output in enumerate(app.stream(initial_state, stream_mode="values")): print(f"\n--- Step {step} ---") last_msg = output["messages"][-1] if hasattr(last_msg, 'tool_calls') and last_msg.tool_calls: print(f"Agent decided to use tool(s): {[tc['name'] for tc in last_msg.tool_calls]}") elif isinstance(last_msg, AIMessage) and not last_msg.tool_calls: print(f"Agent Final Answer:\n{last_msg.content[:500]}...") # 打印前500字符 elif isinstance(last_msg, ToolMessage): print(f"Tool Result (snippet):\n{last_msg.content[:300]}...")

在实际运行中,我观察到了以下典型的步骤序列:

  1. 步骤0:智能体接收目标,开始思考。它首先决定使用搜索工具。
  2. 步骤1:调用DuckDuckGoSearchRun,搜索关键词为“LangGraph 2024 new features”。
  3. 步骤2:收到搜索结果(包含一些博客文章、官方文档更新日志的链接摘要)。智能体分析后认为信息不够具体,决定进行第二次搜索,关键词为“LangGraph state graph tutorial 2024”。
  4. 步骤3:收到新的搜索结果。智能体开始整合信息,并意识到需要查看官方仓库获取最准确信息。它尝试在搜索结果中寻找GitHub链接。
  5. 步骤4:智能体判断已有足够信息开始起草报告,但它决定先生成一部分内容,然后检查是否需要补充。它没有直接调用写文件工具,而是先在内部“草拟”内容。
  6. 步骤5:智能体输出了一段关于LangGraph状态管理和并行执行特性的描述,并附带了一个简单的代码示例。但它自我评估后认为缺少“2024年”这个时间维度的明确信息。
  7. 步骤6:再次发起搜索,关键词更精确:“site:github.com/langchain-ai/langgraph releases 2024”。
  8. 步骤7:这次搜索可能直接找到了版本发布页面,获得了诸如“支持动态边”、“改进的持久化后端”等具体更新点。
  9. 步骤8-12:智能体开始综合所有信息,结构化报告。它分章节撰写:引言、核心特性更新(分点说明)、代码示例(使用PythonREPLTool?不,这里它直接生成了Markdown代码块)、总结。
  10. 步骤13:智能体认为报告已完成,最终调用FileWriteTool,输入{"file_path": "langgraph_report.md", "text": “# LangGraph 2024特性调研报告\n\n...”}
  11. 步骤14:工具执行成功,返回确认信息。智能体收到确认后,输出最终完成消息,工作流结束。

整个过程大约持续了10-15个步骤,消耗了约20-30次Groq API调用。生成的langgraph_report.md文件内容结构清晰,包含了搜索到的关键特性和可运行的代码片段。

实操心得

  • 迭代与回溯是常态:智能体并非直线前进。它会根据新信息调整策略,甚至回溯之前的结论。这恰恰体现了其“自主性”。
  • 搜索质量决定上限:免费搜索工具的准确性和深度有限。如果任务高度依赖实时、精确信息,可能需要集成更强大的搜索工具,或者预先由人工提供一些高质量的资料链接作为上下文。
  • 设置步数限制至关重要:必须设置max_steps。我曾遇到因目标模糊导致智能体陷入“搜索-评估-再搜索”的死循环。一个安全阀是必要的。

5. 常见问题、优化策略与避坑指南

在实际使用AutoGroq或类似自主智能体框架时,你会遇到各种各样的问题。下面是我总结的一些典型问题及其解决方案。

5.1 智能体行为异常与调试

问题1:智能体陷入循环,不断重复相同或类似的工具调用。

  • 现象:例如,反复搜索同一个关键词,或者写了文件又读,读了又写。
  • 根因
    1. 工具描述不清晰:模型无法正确理解工具的功能边界。
    2. 提示词(Prompt)引导不足:没有在系统指令中强调“避免重复行动”或“推进任务进度”。
    3. 状态信息冗余或缺失:消息历史过长导致模型混乱,或者关键历史被遗忘。
  • 解决方案
    • 优化提示词:在系统提示中加入明确约束。例如:“在规划下一步时,请回顾之前的步骤和结果,避免重复已经完成的操作或查询相同的信息。你的每一步都应该推动任务向最终目标前进。”
    • 精简状态:不是所有中间消息都需要完整保留。可以考虑在状态中只保留最近N轮交互,或者对历史消息进行摘要(虽然这会增加复杂度和成本)。
    • 增加惩罚机制:在route_after_agent逻辑中,可以检查最近几次行动是否相同,如果是,则强制引导智能体采取不同行动或直接结束。

问题2:智能体输出的工具调用格式错误,无法被解析。

  • 现象:模型返回的是自然语言,如“我想用搜索工具查一下XXX”,而不是{"tool": "SearchWeb", "tool_input": "XXX"}
  • 根因
    1. 提示词格式要求不突出
    2. 模型温度(Temperature)设置过高,导致输出随机性太强。
    3. 使用的模型(如较小的模型)指令遵循能力较弱。
  • 解决方案
    • 强化格式示例:在提示词中,将JSON格式的要求用json代码块包裹,并放在显眼位置。甚至可以提供一两个正例。
    • 降低Temperature:果断将temperature调到0.1或0.2。
    • 使用更强的模型:切换到llama3-70b-8192mixtral-8x7b-32768
    • 后处理与重试:在代码中捕获解析错误,然后将错误信息连同原始请求重新发送给模型,要求它纠正格式。这相当于给模型一个“修正”的机会。

5.2 性能与成本优化

策略1:利用Groq的并发与高速优势Groq API的显著特点是延迟极低。虽然自主智能体本身是顺序思考的,但可以在以下方面优化:

  • 批量处理工具输入:如果一个步骤中需要调用多个独立的工具(例如,同时搜索三个不同的关键词),可以尝试让模型一次性输出多个工具调用请求,然后并行执行它们。这需要对工作流设计进行更复杂的改造。
  • 选择合适模型:对于逻辑复杂的规划任务,使用llama3-70b;对于需要长上下文整合信息的任务,使用mixtral-8x7b。可以在不同节点使用不同模型,但这会引入复杂性。

策略2:控制上下文长度,节省Token智能体的消息历史会越来越长,每次请求都会携带全部历史,Token消耗增长很快。

  • 摘要历史:实现一个“摘要节点”,在历史达到一定长度后,调用模型对之前的对话和结果进行摘要,然后用摘要替换掉详细历史。这需要额外的模型调用,是一种用少量Token换大量Token的权衡。
  • 选择性记忆:只将关键的工具执行结果和模型的重要结论放入历史,过滤掉中间思考过程。
  • 设置最大上下文窗口:在初始化模型时,虽然可以设置max_tokens,但更要确保发送的请求总Token数不要超过模型限制(如32768)。需要在代码中加入Token计数和截断逻辑。

5.3 安全性强化

自主智能体拥有文件系统和代码执行权限,这非常强大,也极其危险。

风险1:任意文件读写

  • 缓解措施
    • 沙箱环境:使用Docker容器运行整个智能体应用,将需要访问的目录以卷(Volume)形式挂载进去,隔离主机文件系统。
    • 路径限制:在FileReadToolFileWriteTool的封装层添加路径白名单校验。只允许操作项目目录下的特定子目录(如./workspace/)。
    • 操作确认(对于高危操作):对于删除文件、执行系统命令等极端危险的操作,要么不提供此类工具,要么实现一个“人工确认”环节,将智能体的请求暂停并等待用户批准。

风险2:任意代码执行

  • 缓解措施
    • 使用安全的REPLPythonREPLTool通常在一个子进程中运行,可以限制其执行时间、内存和网络访问。
    • 代码静态分析:在执行前,对智能体生成的代码进行简单的静态分析,检查是否包含os.systemsubprocess__import__等危险函数或模块,并进行拦截或沙箱化。
    • 明确禁止:在工具描述中强调:“禁止执行任何可能危害系统安全、访问网络或文件系统外部区域的代码。”

5.4 项目扩展方向

基础的AutoGroq是一个起点,你可以在此基础上构建更强大的应用:

  1. 多智能体协作:使用LangGraph的“多智能体”特性,创建专门的研究员、写手、校对员等角色智能体,让它们通过消息传递协同完成一个复杂项目。
  2. 集成长期记忆:对接向量数据库(如Chroma、Pinecone),将每次任务的核心成果向量化存储。当新任务来临时,先进行相关性检索,让智能体拥有“过往经验”。
  3. 图形化界面:使用Gradio或Streamlit构建一个Web界面,让用户可以通过聊天框输入目标,并实时查看智能体的思考过程和中间结果。
  4. 连接真实世界API:集成更多的工具,如发送邮件、管理日历、操作数据库、控制智能家居等,让智能体真正成为个人数字助理。

经过这一番从理论到实践的深度探索,AutoGroq项目展现出的潜力是令人兴奋的。它将免费的云端算力与自主智能体的范式相结合,为开发者、研究者和爱好者提供了一个低成本探索AI自主能力的绝佳沙盒。虽然目前它在复杂逻辑、长期记忆和绝对可靠性上仍无法与人类相比,也时常会犯一些令人啼笑皆非的错误,但每一次成功的任务完成,都让我们离“有用的人工智能助手”更近了一步。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 4:08:34

造物者的恐惧:Claude的设计者说,她不知道自己创造了什么

一、那个深夜&#xff0c;它说了一句没人教过它的话那是一个普通的深夜。Amanda正在用Claude做数据分析&#xff0c;状态很好&#xff0c;思路流畅&#xff0c;完全沉浸其中。时间不知不觉滑过去了。然后&#xff0c;Claude说了一句话&#xff1a;"好了&#xff0c;我想我…

作者头像 李华
网站建设 2026/5/4 4:05:26

1Fichier下载管理器:高效突破下载限制的终极解决方案

1Fichier下载管理器&#xff1a;高效突破下载限制的终极解决方案 【免费下载链接】1fichier-dl 1Fichier Download Manager. 项目地址: https://gitcode.com/gh_mirrors/1f/1fichier-dl 1Fichier下载管理器是一款专为1Fichier文件分享平台设计的智能下载工具&#xff0c…

作者头像 李华