1. 从“问答机器人”到“会自己干活的智能体”差在哪Agentic AI 这个词最近被提得很多但落到代码层面它其实就一件事让大模型不再只输出一段文字而是能自己决定“下一步该干什么”然后真的去调用工具、拿到结果、再判断要不要继续。你给它一句“帮我查一下今年 AI Agent 市场规模算个增长率写成报告”它不会直接编一段话糊弄你而是会先搜索、再计算、最后整理输出。这个“自己规划 自己执行 自己纠错”的循环就是 Agentic AI 和普通聊天机器人的本质区别。Gemini 1.5 在这个场景里挺合适上下文窗口大能装下几十步的推理轨迹不丢信息原生多模态后面想让它读图表、看截图也留了余地价格相对友好Agent 这种要反复调 LLM 的用法成本敏感度很高。LangChain 则负责把“推理层、工具层、记忆层、编排层”串起来ReAct 就是其中最经典的一种编排模式——Reasoning 和 Acting 交替进行每一步都留下 Thought / Action / Observation 的痕迹。这篇面向的是想亲手跑通第一个智能体的开发者不需要你懂多深的强化学习只要会 Python、能配环境变量就能跟着把 ReAct Agent 跑起来。我会用 TaoToken 统一 Key 来管理模型调用避免在多个平台之间来回切换 Key 和额度。下面从原理拆到代码再给一份可复制的配置骨架和一次端到端验证。2. 前置准备用 TaoToken 统一 Key 管住模型调用在写 Agent 之前先把“钥匙”这件事理顺。Agent 跑起来会频繁请求模型如果每个模型、每个环境都单独配 Key调试阶段很容易乱。TaoToken 的做法是给你一个统一的 API Key通过兼容接口去调用不同模型配置一次就能在 LangChain、脚本、IDE 插件里复用。你需要先拿到 Key进入控制台创建 API Key地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。创建后复制那串 Key后面所有配置都围绕它展开。接口基地址用 https://taotoken.net/api 注意这个地址不带任何查询参数直接作为 base_url 填进去即可。如果你只是想先验证模型通不通可以打开模型对话页面 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 在里面直接发一句话看返回确认 Key 有效再进代码。长期要做编码类 Agent、需要稳定额度的可以看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它更适合高频调用场景。接入细节和参数说明在文档里 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 遇到字段对不上时优先查这里。注意Key 只放在环境变量或本地配置文件里不要硬编码进提交到仓库的代码。下面所有示例都从环境变量读取。3. 可复制配置settings.json 与 config.toml 骨架不同工具链读的配置文件不一样这里给两份骨架按你用的客户端挑一份改。核心都是三样base_url、api_key、model。先看 settings.json适合 VS Code 系插件或部分 CLI 工具读取{ llm: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key: ${TAOTOKEN_API_KEY}, model: gemini-1.5-pro, temperature: 0.1, max_tokens: 4096 }, agent: { max_iterations: 10, handle_parsing_errors: true, verbose: true } }再看 config.toml适合 Python 侧用 tomllib 读取或者给某些 Agent 框架当配置源[llm] provider openai-compatible base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model gemini-1.5-pro temperature 0.1 max_tokens 4096 [agent] max_iterations 10 handle_parsing_errors true verbose true两份配置里${TAOTOKEN_API_KEY}是占位实际运行时从环境变量注入。Linux/macOS 下这样设置export TAOTOKEN_API_KEY你的KeyWindows PowerShell$env:TAOTOKEN_API_KEY你的Key参数对照表方便你按需改参数作用建议值base_url接口基地址https://taotoken.net/apimodel推理模型gemini-1.5-protemperature随机性Agent 场景 0.1 左右max_tokens单次输出上限4096max_iterations推理循环上限10防死循环handle_parsing_errors解析失败自动重试true4. 代码实现ReAct 循环 工具调用跑通环境依赖先装好LangChain 0.3 以上、langchain-google-genai 或兼容层、python-dotenvpip install langchain0.3.0 langchain-community python-dotenv下面这段是核心用兼容接口把 TaoToken 当模型入口工具集包含搜索、代码执行、计算器三个import os from dotenv import load_dotenv load_dotenv() # 统一从 TaoToken 读取 BASE_URL https://taotoken.net/api API_KEY os.environ[TAOTOKEN_API_KEY] from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain.tools import Tool, tool from langchain import hub from langchain_community.tools import DuckDuckGoSearchRun from langchain_experimental.tools import PythonREPLTool # 推理层走兼容接口 llm ChatOpenAI( modelgemini-1.5-pro, base_urlBASE_URL, api_keyAPI_KEY, temperature0.1, max_tokens4096, ) # 行动层三个工具 search DuckDuckGoSearchRun() web_search_tool Tool( nameweb_search, funcsearch.run, description搜索互联网获取最新信息输入为搜索查询词, ) python_repl PythonREPLTool() code_exec_tool Tool( namepython_code_executor, funcpython_repl.run, description执行Python代码用于数据分析、计算。输入为合法Python代码字符串, ) tool def calculator(expression: str) - str: 安全数学计算器接收如 3.14 * 5 的表达式 try: import math allowed set(0123456789.-*/() ) if not all(c in allowed for c in expression): return Error: invalid characters return str(eval(expression, {__builtins__: {}}, {math: math})) except Exception as e: return fError: {str(e)} tools [web_search_tool, code_exec_tool, calculator] # 编排层ReAct 提示模板 prompt hub.pull(hwchase17/react) agent create_react_agent(llmllm, toolstools, promptprompt) agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, max_iterations10, handle_parsing_errorsTrue, )这段代码里ChatOpenAI只是走 OpenAI 兼容协议实际请求发到 TaoToken 的 base_url模型名填gemini-1.5-pro。工具描述要写清楚“输入是什么”ReAct 靠这段描述决定什么时候调哪个工具描述含糊会导致乱调。5. 端到端验证让 Agent 自己查数据、算增长率、出报告给一个多步任务观察它是否真的走完“搜索 → 计算 → 输出”query 请完成以下任务 1. 搜索 2026 年全球 AI Agent 市场规模数据需要具体数值如 X 亿美元。 2. 假设 2023 年市场规模为 50 亿美元计算 2023-2026 年的复合年增长率CAGR。 3. 将结果整理成 Markdown 报告包含标题、数据来源、计算过程。 response agent_executor.invoke({input: query}) print(\n最终输出\n, response[output])跑起来后verbose 会打印推理轨迹大致长这样 Entering new AgentExecutor chain... Thought: 我需要先搜索 2026 年 AI Agent 市场规模。 Action: web_search Action Input: 2026 global AI agent market size Observation: 根据某市场报告2026 年全球 AI Agent 市场规模预计达到 287 亿美元... Thought: 得到 2026 年数据为 287 亿美元。现在用 Python 计算 CAGR。 Action: python_code_executor Action Input: import math initial 50 final 287 years 3 cagr (final/initial) ** (1/years) - 1 print(fCAGR {cagr*100:.2f}%) Observation: CAGR 79.34% Thought: 现在可以生成 Markdown 报告。 Final Answer: # AI Agent 市场规模分析报告2023-2026 ... Finished chain.成功标志有三个verbose 里出现完整的 Thought / Action / Observation 循环计算步骤由代码执行器完成而不是模型口算最终输出是结构化 Markdown。如果只看到一段直接回答、没有工具调用说明提示模板或工具描述没生效回到上一节检查。6. 本篇常见错排查报错一401 或鉴权失败。先确认环境变量名和代码里读的是同一个echo $TAOTOKEN_API_KEY看有没有值。base_url 结尾不要多加斜杠用https://taotoken.net/api即可。Key 失效就去控制台重新生成。报错二模型名不识别。兼容接口下模型名要按平台支持的写gemini-1.5-pro对不上时去模型对话页面确认当前可用名称再回填配置。报错三Agent 不调工具直接编答案。多半是工具 description 太模糊或者 ReAct 模板没拉对。把 description 改成“输入为搜索查询词”这种明确句式并确认hub.pull(hwchase17/react)成功。报错四解析错误反复重试。打开handle_parsing_errorsTrue同时把max_iterations设成 10 左右避免无限循环。模型输出格式飘的时候temperature 降到 0.1 以下。报错五代码执行器报安全或超时。本地PythonREPLTool是直接执行生产环境要换 Docker 沙箱隔离加 timeout。调试阶段先用简单表达式验证通路。报错六请求超时或额度不足。检查账户额度高频调用场景考虑 Coding Plan。网络层面确认能正常访问 base_url不要用任何非官方代理方式。7. 接下来怎么走把 Key 和 Agent 都管起来跑通第一个 ReAct Agent 之后你会发现真正花时间的不是写循环而是管 Key、管额度、管不同模型之间的切换。用 TaoToken 统一 Key 的好处就在这里配置一次LangChain、脚本、IDE 插件都能复用换模型只改一个 model 字段。想继续验证模型能力去模型对话页面直接试要把 Agent 接进日常编码流程看 Coding Plan接入参数对不上时文档里有完整字段说明。先把这篇的代码原样跑一遍再改工具集和提示词你的第二个、第三个智能体会快很多。