云网站开发,洮南住建局网站,网站建设发展制度,流量卡代理平台有哪些目录
#x1f9e0; 第一部分#xff1a;思维篇——如何设计智能体#xff1f;
1.1 什么是“任务分解”#xff1f;
1.2 本项目的架构设计
#x1f575;️ 角色 A#xff1a;Planner#xff08;主编/研究员#xff09;
✍️ 角色 B#xff1a;Writer#xff08;笔…目录 第一部分思维篇——如何设计智能体1.1 什么是“任务分解”1.2 本项目的架构设计️ 角色 APlanner主编/研究员✍️ 角色 BWriter笔者⚖️ 角色 CReviewer审稿人1.3 灵魂注入提示词Prompts设计️ 第二部分准备篇——获取 Tavily Search API获取步骤 第三部分实战篇——代码落地3.1 目录结构3.2 步骤一配置环境 (.env)3.3 步骤二连接大脑 (src/config.py)3.4 步骤三定义“接力棒” (src/state.py)3.5 步骤四定义工种 (src/nodes.py)3.6 步骤五组装流水线 (main.py) 运行效果一觉醒来你回到2015配备deepseek超级科研Agent系统。当你抛出一个课题比如“分析 2025 年 AI Agent 的技术趋势”有人立马去 Google Scholar 狂搜资料有人根据资料快速起草长文还有个严厉的导师帮你审稿不合格就打回重写。今天我们将不再是简单的“写论文”而是要扮演CTO首席技术官的角色利用国产最强模型DeepSeek-V3和LangGraph把这个梦幻团队造出来。完整代码已上传点击作者主页资源即可下载完整代码顺便点个关注吧~~ 第一部分思维篇——如何设计智能体在写代码之前最重要的其实是设计。很多新手做 Agent 效果不好不是代码写得烂而是SOP标准作业程序没理顺。1.1 什么是“任务分解”如果你直接告诉 AI“给我写篇完美的论文”它大概率会给你生成一篇泛泛而谈的废话。Agent 设计的核心秘诀就一句话把大任务切碎直到每个小任务都能由一个刚毕业的实习生独立完成。我们要把“写论文”这个大黑盒拆解成三个具体的工序信息获取Input不管写什么得先有素材。角色规划师/研究员。技能必须能上网Google/Bing。内容生成Processing有了素材进行整合与创作。角色作家。技能擅长长文本写作逻辑严密。质量控制Quality Control这一步最关键也是 Agent 和 Chatbot 的区别。角色审稿人。技能批判性思维能挑刺。1.2 本项目的架构设计基于上面的逻辑我们定义了三个具体的智能体Agent️ 角色 APlanner主编/研究员任务理解用户题目去搜索引擎抓取最新的几篇技术文章然后汇总成一份大纲。为什么需要它防止 Writer 瞎编幻觉必须基于真实搜索结果来写。✍️ 角色 BWriter笔者任务拿着 Planner 给的大纲和资料写正文。如果被 Reviewer 骂了要负责根据意见修改。输入大纲 资料 可选的审稿意见。输出Markdown 格式的草稿。⚖️ 角色 CReviewer审稿人任务模拟苛刻的甲方。只做判断题通过还是不通过如果不通过哪里不好核心逻辑如果它说“不通过”流程会倒流回 Writer 那里形成一个循环Loop。1.3 灵魂注入提示词Prompts设计代码只是骨架提示词Prompt才是灵魂。为了让 DeepSeek 扮演好这些角色我们需要精准定义它们的人设。我们将使用 YAML 文件来管理提示词这样修改起来非常方便# prompts.yaml planner: system: | 你是一个思维缜密的科研主编。 目标根据用户的主题 {task} 和搜索到的资料制定一份逻辑严密的博文大纲。 要求 1. 必须基于搜索结果不要凭空捏造。 2. 大纲包含引言、核心概念、技术实现、总结。 3. 输出要条理清晰。 writer: system: | 你是一名资深技术专家。请基于以下信息撰写文章 【任务】: {task} 【大纲】: {plan} 【参考资料】: {content} 【审稿意见】: {critique} (如果是初稿则为无) 要求 1. 如果有审稿意见请务必根据意见修改文章不要忽略 2. 使用标准的 Markdown 格式。 3. 代码块请用 Python 格式标记。 reviewer: system: | 你是严厉的 Nature 期刊审稿人。请评审以下草稿 {draft} 你的任务是判断文章是否合格。 - 如果文章逻辑严密、内容充实请仅回复: APPROVE - 如果需要修改请列出 3 条具体的修改建议。️ 第二部分准备篇——获取 Tavily Search API既然要写科研论文联网搜索是必不可少的。为什么不用 Google Search API因为它配置极其麻烦且返回的是一大堆 HTML 乱码AI 看不懂。Tavily是专门为 AI Agent 设计的搜索引擎它会帮你把网页内容清洗、提取、摘要直接喂给大模型。获取步骤访问官网打开 https://tavily.com/。注册账号点击 Start for free支持 Google 或 GitHub 一键登录。复制 Key登录后在overview 页就能看到Your API Key通常以tvly-开头。额度免费版每月有 1000 次搜索额度做开发测试绰绰有余。拿到 Key 后请保存在记事本里稍后我们要填入配置文件。 第三部分实战篇——代码落地现在我们开始写代码。为了保持优雅我们将采用模块化的结构。3.1 目录结构请在你的 IDEVS Code / PyCharm中创建如下文件夹ai_paper_team/ ├── .env # [重要] 存放 API Key ├── prompts.yaml # [核心] 上面设计的提示词文件 ├── main.py # [入口] 启动程序 └── src/ ├── __init__.py ├── config.py # [配置] DeepSeek 和 Tavily 的配置 ├── state.py # [状态] 定义数据在 Agent 间怎么传 ├── nodes.py # [逻辑] 具体干活的函数 └── utils.py # [UI] 控制台美化工具Linux/macOS端运行下面的代码快速创建项目。# Linux/macOSbash/zsh 终端指令 # 通过 mkdir -p 创建多级目录touch 批量创建空文件一行即可完成结构搭建 # 创建根目录src子目录再创建所有文件 mkdir -p ai_paper_team/src \ touch ai_paper_team/.env \ touch ai_paper_team/requirements.txt \ touch ai_paper_team/prompts.yaml \ touch ai_paper_team/main.py \ touch ai_paper_team/src/__init__.py \ touch ai_paper_team/src/config.py \ touch ai_paper_team/src/state.py \ touch ai_paper_team/src/nodes.py \ touch ai_paper_team/src/utils.py3.2 步骤一配置环境 (.env)在.env文件中填入你的密钥# DeepSeek API Key (从 deepseek 开放平台获取) DEEPSEEK_API_KEYsk-xxxxxxxxxxxx # Tavily Search API Key (刚刚获取的) TAVILY_API_KEYtvly-xxxxxxxxxxxx3.3 步骤二连接大脑 (src/config.py)DeepSeek V3 完美兼容 OpenAI 的 SDK所以配置起来非常简单。import os import yaml from dotenv import load_dotenv from langchain_openai import ChatOpenAI # 加载 .env 环境变量 load_dotenv() # 读取 prompts.yaml def load_prompts(): with open(prompts.yaml, r, encodingutf-8) as f: return yaml.safe_load(f) PROMPTS load_prompts() # 初始化 DeepSeek 模型 llm ChatOpenAI( modeldeepseek-chat, api_keyos.getenv(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com, # 关键一定要指向 DeepSeek 的地址 temperature0.6 # 稍微有点创造力但别太发散 )3.4 步骤三定义“接力棒” (src/state.py)LangGraph 的核心是状态State。你可以把它想象成一个共享文件夹每个 Agent 拿到文件夹后读取里面的文件处理完再把新文件放进去传给下一个人。from typing import TypedDict class AgentState(TypedDict): task: str # 原始的任务主题 plan: str # Planner 生成的大纲 content: str # Tavily 搜到的资料 draft: str # Writer 写的草稿 critique: str # Reviewer 给的修改意见 revision_number: int # 当前修改了第几次防止死循环 max_revisions: int # 最多允许修改几次3.5 步骤四定义工种 (src/nodes.py)这里是真正的业务逻辑。我们让 DeepSeek 扮演不同的角色。from langchain_community.tools.tavily_search import TavilySearchResults from langchain_core.prompts import ChatPromptTemplate from src.state import AgentState from src.config import llm, PROMPTS # 初始化搜索工具 search_tool TavilySearchResults(max_results3) def planner_node(state: AgentState): 规划师负责搜索和定大纲 print(--- [PLANNER] 正在思考并搜索资料 ---) # 1. 联网搜索 search_results search_tool.invoke(state[task]) # 把搜索结果拼接成字符串 content_str \n.join([r[content] for r in search_results]) # 2. 调用 DeepSeek 生成大纲 prompt ChatPromptTemplate.from_template(PROMPTS[planner][system]) chain prompt | llm result chain.invoke({task: state[task], content: content_str}) # 更新状态传给下一个人 return {plan: result.content, content: content_str, revision_number: 0} def writer_node(state: AgentState): 笔者负责写和改 print(--- [WRITER] 正在撰写/修改文章 ---) prompt ChatPromptTemplate.from_template(PROMPTS[writer][system]) chain prompt | llm result chain.invoke({ task: state[task], plan: state[plan], content: state[content], critique: state.get(critique, 无) # 如果是第一次写就没有意见 }) # 修改次数 1 revision_num state.get(revision_number, 0) 1 return {draft: result.content, revision_number: revision_num} def reviewer_node(state: AgentState): 审稿人负责挑刺 print(--- [REVIEWER] 正在严格审阅 ---) prompt ChatPromptTemplate.from_template(PROMPTS[reviewer][system]) chain prompt | llm result chain.invoke({draft: state[draft]}) return {critique: result.content} def router_node(state: AgentState): 路由决定下一步怎么走 critique state[critique] rev_num state[revision_number] max_rev state[max_revisions] # 逻辑判断 if APPROVE in critique: print(--- [系统] 审稿通过流程结束 ---) return end elif rev_num max_rev: print(--- [系统] 修改次数超限强制结束 ---) return end else: print(--- [系统] 意见驳回退回 Writer 修改 ---) return continue3.6 步骤五组装流水线 (main.py)最后我们像搭积木一样把这些 Node 用 Edge边连起来。from langgraph.graph import StateGraph, END from src.state import AgentState from src.nodes import planner_node, writer_node, reviewer_node, router_node def build_graph(): # 1. 创建图 workflow StateGraph(AgentState) # 2. 添加节点 (招聘员工) workflow.add_node(planner, planner_node) workflow.add_node(writer, writer_node) workflow.add_node(reviewer, reviewer_node) # 3. 设置入口 workflow.set_entry_point(planner) # 4. 连接节点 (定义工序) # Planner 做完 - 给 Writer workflow.add_edge(planner, writer) # Writer 做完 - 给 Reviewer workflow.add_edge(writer, reviewer) # 5. 条件边 (Conditional Edge) # Reviewer 做完 - 根据情况要么回 Writer要么结束 workflow.add_conditional_edges( reviewer, router_node, { continue: writer, end: END } ) return workflow.compile() if __name__ __main__: app build_graph() print( 多智能体写作团队已就位...) user_task 分析 AI Agent 在金融领域的应用前景 # 启动 final_state app.invoke( {task: user_task, max_revisions: 2}, # 最多改2次 config{recursion_limit: 10} ) print(\n\n 最终产出 \n) print(final_state[draft]) 运行效果当你运行python main.py时你会看到控制台打印出这样的流程这就是多智能体协作的魅力它不是一步到位的而是像人类团队一样通过沟通、反馈、迭代产出高质量的内容。快去申请 Key复制上面的代码从零开始搭建你的第一支 AI 团队吧