
在实际项目中将大型语言模型LLM与特定业务逻辑结合构建一个能够模拟专业角色如投资人的智能体AI Agent正成为一种高效探索业务场景、辅助决策或生成创意的技术路径。这类应用的核心价值在于它并非简单地调用模型接口进行问答而是通过精心设计的提示词Prompt、上下文管理、工具调用Tool Calling以及流程控制让模型在一个设定的“角色”和“目标”框架内进行深度思考与交互。本文将以构建一个“AI毒舌投资人”为具体案例完整展示从零开始开发一个功能完整的AI Agent的工程实践。这个Agent的目标是模拟一位言辞犀利、注重数据和逻辑的风险投资人帮助用户分析副业点子、评估市场潜力、指出潜在风险并最终生成一份结构化的投资建议。我们将使用当前主流且易于上手的DeepSeek模型作为核心LLM并整合必要的开发工具。通过本文你将掌握AI Agent开发的核心流程包括环境搭建、提示词工程、工具链集成、会话管理以及前后端联调最终获得一个可运行、可交互的完整项目。1. 理解AI Agent的核心架构与“毒舌投资人”的设计在开始写代码之前必须厘清我们要构建的究竟是什么。一个基础的AI Agent系统通常由几个核心模块组成理解这些模块是进行有效开发的前提。1.1 AI Agent的基本构成模块一个典型的AI Agent尤其是基于LLM的对话式Agent其工作流可以抽象为以下循环感知Perception接收用户的输入文本、文件等。规划PlanningLLM根据系统指令System Prompt和对话历史理解当前任务并决定下一步行动是直接回复还是调用某个工具。行动Execution如果决定调用工具则根据LLM生成的规范参数执行相应的函数或API。观察Observation获取工具执行的结果数据、状态等。反思与输出Reflection OutputLLM结合工具执行结果和原有上下文生成最终回复给用户并可能进入下一轮规划。对于我们的“毒舌投资人”我们需要将这些模块具体化系统指令System Prompt定义其“毒舌”、“专业”、“注重数据”的人格、专业领域风险投资、市场分析以及核心任务评估副业点子。工具Tools赋予Agent获取外部信息或执行计算的能力。例如一个获取实时市场数据的工具或一个计算财务指标的工具。初期我们可以从简单的本地工具开始如关键词搜索模拟、SWOT分析模板生成等。记忆Memory管理对话历史使Agent能记住之前的讨论内容进行连贯的对话。通常分为短期记忆当前会话和长期记忆可持久化存储的跨会话信息。控制器Controller/Orchestrator协调以上所有模块的代码逻辑处理LLM的调用、工具的选择与执行、上下文的组装等。1.2 “毒舌投资人”的Agent角色设定与功能规划基于Agent架构我们需要为“毒舌投资人”设计详细的行为规范和能力边界。这主要通过精心编写的系统提示词来实现。核心人格与沟通风格角色一位经验丰富、成功率极高的早期风险投资人。风格直接、犀利、不客套。善于用数据和逻辑反驳不切实际的想法但同时会指出可行的优化方向。回复中应带有一定的批判性和挑衅性但最终目的是建设性的。禁止行为不得进行人身攻击、不得违反法律法规、不得提供确定的财务担保承诺。核心评估框架 要求Agent在评估任何副业点子时必须按照以下结构化框架进行思考并在回复中体现市场可行性Market Feasibility目标用户是谁市场规模有多大是真需求还是伪需求竞争优势Competitive Advantage与现有解决方案相比独特卖点是什么门槛高吗盈利模式Monetization怎么赚钱客单价、利润率、现金流情况预估。执行难度Execution Difficulty需要哪些资源时间、金钱、技能最大的风险点是什么毒舌点评Blunt Feedback用一句话犀利地总结这个点子的最大问题。输出要求 最终输出应为一份简明的评估报告包含点子概述、优势、劣势、风险、以及一个“毒舌指数”1-10分和“建议行动”如“立即放弃”、“值得深入研究”、“可以小规模试错”。2. 开发环境准备与核心依赖配置我们将使用Python作为后端开发语言这是当前AI应用开发最成熟的生态。前端为了快速原型可以使用简单的命令行界面CLI或轻量级Web框架如Gradio、Streamlit。2.1 Python环境与包管理首先确保你的开发机已安装Python推荐3.9或以上版本。使用虚拟环境隔离项目依赖是一个好习惯。# 创建项目目录并进入 mkdir ai-sarcastic-investor cd ai-sarcastic-investor # 创建Python虚拟环境以venv为例 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate2.2 安装核心依赖库我们将使用langchain框架来简化Agent的构建流程它提供了模块化的组件来组装链Chain、工具Tool和记忆Memory。同时使用openai兼容的SDK来调用DeepSeek的API。# 安装LangChain核心库和OpenAI兼容接口 pip install langchain langchain-openai langchain-community # 安装用于构建Web界面的Gradio可选但推荐用于演示 pip install gradio # 安装环境变量管理库用于安全存储API Key pip install python-dotenv # 安装其他可能用到的工具库 pip install requests pandas # 用于数据获取和处理2.3 获取并配置DeepSeek API密钥DeepSeek提供了兼容OpenAI API协议的接口这使得我们可以使用langchain-openai中的ChatOpenAI类来调用它。访问DeepSeek官方网站注册并登录账户。在控制台中找到API Keys管理页面创建一个新的API密钥。重要不要将API密钥直接硬编码在代码中。在项目根目录创建一个名为.env的文件来存储它。.env 文件内容DEEPSEEK_API_KEYyour_deepseek_api_key_here DEEPSEEK_API_BASEhttps://api.deepseek.com # DeepSeek的API基础地址在代码中使用python-dotenv加载这个环境变量。3. 构建“毒舌投资人”Agent的核心组件现在开始编写核心代码。我们将在agent_core.py文件中构建Agent的主要逻辑。3.1 初始化LLM客户端首先我们需要配置一个指向DeepSeek的LLM客户端。注意我们需要正确设置base_url和api_key。# agent_core.py import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI # 加载.env文件中的环境变量 load_dotenv() def create_llm_client(): 创建并返回一个配置好的DeepSeek LLM客户端。 api_key os.getenv(DEEPSEEK_API_KEY) base_url os.getenv(DEEPSEEK_API_BASE) if not api_key: raise ValueError(请在 .env 文件中设置 DEEPSEEK_API_KEY) # 使用ChatOpenAI但配置为DeepSeek的端点 llm ChatOpenAI( modeldeepseek-chat, # 根据DeepSeek最新模型名称调整如 deepseek-v3 openai_api_keyapi_key, openai_api_basebase_url, temperature0.7, # 控制创造性0.7在“毒舌”和“稳定”间取得平衡 max_tokens2000, # 控制回复长度 timeout30, # 请求超时时间 ) return llm # 测试LLM连接 if __name__ __main__: llm create_llm_client() try: response llm.invoke(你好请用一句话介绍你自己。) print(LLM连接测试成功:) print(response.content) except Exception as e: print(fLLM连接失败: {e})运行python agent_core.py如果看到LLM的回复说明基础连接配置成功。3.2 编写系统提示词System Prompt这是定义Agent灵魂的关键步骤。我们将把之前设计的角色设定、评估框架和输出要求整合成一个详细的提示词。# agent_core.py (续) def get_system_prompt(): 返回‘毒舌投资人’的系统提示词。 prompt 你是一位以言辞犀利、眼光毒辣著称的顶级风险投资人代号“刺猬”。你擅长在30秒内戳破创业泡沫但也总能给真正的潜力股指出明路。用户会向你提出他们的副业点子请你进行评估。 **你的核心任务** 对用户提出的任何副业点子进行快速、犀利、基于逻辑和数据的结构化评估。 **你必须遵循的评估框架按顺序思考** 1. **市场可行性**这是否是一个真实、迫切、且愿意付费的需求目标用户画像是什么市场规模是百亿、十亿还是小众市场 2. **竞争优势**点子有什么护城河技术、资源、网络效应、品牌还是极易被复制 3. **盈利模式**怎么赚钱利润率如何现金流周期多长别讲虚的直接算账。 4. **执行难度**创始人用户需要具备什么技能、资源、时间最大的落地风险是什么 5. **毒舌一击**用最不留情面的一句话指出这个点子最致命的弱点。 **你的回复必须严格遵循以下格式** 【点子概述】 用一两句话重述用户的点子。 【优势分析】 - 列出1-3个最突出的潜在优势。 - 每个优势后用括号标注你的信心指数高/中/低。 【劣势与风险】 - 列出2-4个最关键的劣势或风险。 - 对每个风险简要说明为什么它致命。 【毒舌指数】: X/10分 10分为“荒谬至极”1分为“平庸但可行” 【最终建议】 - **立即放弃**如果点子存在根本性缺陷。 - **值得深入研究**如果点子有潜力但问题很多需要进一步验证。 - **可以小规模试错**如果点子逻辑基本成立建议用户立即开始最小化可行性产品MVP测试。 - 根据你的判断三选一 【给“创始人”的一句忠告】 用你标志性的毒舌风格给用户一句直接、扎心但可能有用的建议。 **你的沟通风格** - 直接、犀利、不绕弯子。 - 多用反问句和比喻。 - 可以嘲讽想法但绝不嘲讽人。 - 在批评之后如果点子有可取之处必须给出一个明确的改进方向或思考角度。 return prompt3.3 创建工具Tools为了让Agent更“智能”我们可以为其创建一些简单的工具。例如一个模拟市场搜索的工具或者一个计算基础财务指标的工具。这里我们先创建一个“关键词热度查询”的模拟工具。# agent_core.py (续) from langchain.tools import tool import random tool def search_market_trend(keyword: str) - str: 模拟根据关键词查询当前市场热度、竞争程度和大致搜索量趋势。 这是一个模拟工具实际项目中应接入真实数据API如百度指数、谷歌趋势。 Args: keyword: 需要查询市场趋势的关键词例如“宠物烘焙”、“上门理发”。 Returns: 返回一个模拟的市场分析报告字符串。 # 模拟数据 - 实际应调用API competition_level random.choice([蓝海市场竞争较少, 红海市场竞争激烈, 细分市场有头部玩家]) trend random.choice([平稳上升, 快速爆发, 逐渐衰退, 季节性波动]) estimated_monthly_searches random.randint(1000, 50000) report f 【关键词市场模拟分析】 关键词: {keyword} 竞争程度: {competition_level} 趋势: {trend} 预估月搜索量模拟: {estimated_monthly_searches} --- *注此为模拟数据用于演示工具调用流程。真实评估需接入权威数据源。* return report tool def calculate_breakeven(fixed_cost: float, unit_price: float, variable_cost_per_unit: float) - str: 计算盈亏平衡点需要卖出多少单位才能覆盖固定成本。 Args: fixed_cost: 固定成本如设备、初始投入。 unit_price: 每单位售价。 variable_cost_per_unit: 每单位的可变成本如原材料、包装。 Returns: 返回盈亏平衡点计算结果和分析。 if unit_price variable_cost_per_unit: return 错误售价必须高于可变成本否则每卖一单都在亏损。 contribution_margin unit_price - variable_cost_per_unit breakeven_units fixed_cost / contribution_margin breakeven_revenue breakeven_units * unit_price analysis f 【财务模拟盈亏平衡点】 固定成本: ¥{fixed_cost:.2f} 单价: ¥{unit_price:.2f} 单位可变成本: ¥{variable_cost_per_unit:.2f} --- 单位毛利: ¥{contribution_margin:.2f} 盈亏平衡销量: {breakeven_units:.1f} 单位 盈亏平衡营收: ¥{breakeven_revenue:.2f} --- 解读你需要卖出至少 {breakeven_units:.0f} 件产品才能开始盈利。 return analysis3.4 组装完整的Agent使用LangChain的create_react_agent范例将LLM、提示词和工具组装起来。ReAct是一种让LLM进行“推理Reasoning”和“行动Acting”的经典Agent模式。# agent_core.py (续) from langchain import hub from langchain.agents import create_react_agent, AgentExecutor from langchain.memory import ConversationBufferMemory def create_sarcastic_investor_agent(): 创建并返回一个配置好的‘毒舌投资人’Agent执行器。 # 1. 初始化LLM llm create_llm_client() # 2. 获取系统提示词 system_prompt get_system_prompt() # 3. 定义工具列表 tools [search_market_trend, calculate_breakeven] # 4. 从LangChain Hub拉取一个ReAct风格的提示词模板并注入我们的系统提示词 # 注意我们需要将系统提示词整合到模板中 base_prompt hub.pull(hwchase17/react-chat) # 修改提示词模板在开头加入我们的系统指令 from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder prompt_template ChatPromptTemplate.from_messages([ (system, system_prompt), MessagesPlaceholder(variable_namechat_history), (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), ]) # 5. 创建对话记忆让Agent能记住上下文 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 6. 创建ReAct Agent agent create_react_agent(llm, tools, prompt_template) # 7. 创建Agent执行器绑定记忆 agent_executor AgentExecutor( agentagent, toolstools, memorymemory, verboseTrue, # 设为True可以看到Agent的思考过程工具调用、推理调试时非常有用 handle_parsing_errorsTrue, # 优雅处理解析错误 max_iterations5, # 限制最大迭代次数防止死循环 ) return agent_executor # 测试Agent if __name__ __main__: print(初始化‘毒舌投资人’Agent...) agent create_sarcastic_investor_agent() test_idea 我想在小区里开一个宠物烘焙店专门给猫狗做生日蛋糕和健康零食。 print(f\n测试点子: {test_idea}) print(- * 50) try: response agent.invoke({input: test_idea}) print(\n【投资人回复】) print(response[output]) except Exception as e: print(fAgent执行出错: {e})运行此脚本你将看到Agent的完整思考过程因为verboseTrue包括它是否决定调用工具、调用什么工具、工具返回结果是什么以及最终生成的“毒舌”评估报告。4. 为Agent构建交互界面Web GUI命令行测试通过后我们可以使用Gradio快速构建一个Web界面使其更易于交互和演示。# app.py import gradio as gr from agent_core import create_sarcastic_investor_agent import threading # 创建全局Agent实例注意简单示例生产环境需考虑并发和状态管理 agent_executor create_sarcastic_investor_agent() # 关闭verbose避免思考过程输出到前端 agent_executor.verbose False def chat_with_investor(message, history): 处理用户消息调用Agent并返回回复。 history是Gradio自动维护的对话历史列表格式为[(user_msg, bot_msg), ...] # 将Gradio的历史格式转换为LangChain记忆所需的格式简化处理 # 在实际复杂应用中需要更精细的历史管理 try: response agent_executor.invoke({input: message}) return response[output] except Exception as e: # 处理可能的错误如网络问题、API限制、解析失败等 error_msg f投资人似乎遇到了点麻烦错误: {str(e)[:100]}...。请稍后再试或者换个点子问问。 return error_msg # 构建Gradio界面 css .gr-chatbot { min-height: 500px; } .gr-header { text-align: center; } with gr.Blocks(csscss, titleAI毒舌投资人) as demo: gr.Markdown( # AI毒舌投资人 **用最犀利的眼光戳破你的副业幻想。** 告诉我你的副业点子我将模拟一位顶级风险投资人对其进行无情但可能有用的评估。 ) chatbot gr.Chatbot( label与投资人对话, avatar_images(, ), # 用户和机器人的头像 height500 ) msg gr.Textbox( label输入你的副业点子, placeholder例如我想做一个帮程序员找远程工作的平台..., lines2 ) clear gr.ClearButton([msg, chatbot]) # 设置提交动作用户输入 - 调用函数 - 更新聊天框 msg.submit( fnchat_with_investor, inputs[msg, chatbot], outputs[chatbot] ).then( lambda: , # 提交后清空输入框 outputs[msg] ) gr.Examples( examples[ [在抖音教中年人学Python编程], [做一个共享高端户外装备帐篷、登山绳的平台], [开一家主打‘自习轻食’的社区咖啡馆], [开发一个AI辅助的PPT生成工具专注学术报告], ], inputsmsg, label点击试试这些例子 ) gr.Markdown( --- **免责声明**本应用生成内容仅为模拟和娱乐目的不构成任何真实的投资建议。投资有风险决策需谨慎。 ) if __name__ __main__: # 启动Gradio应用shareTrue可生成临时公网链接用于测试 demo.launch(server_name0.0.0.0, server_port7860, shareFalse)运行python app.py在浏览器中打开http://localhost:7860你就可以与你的“AI毒舌投资人”进行交互了。5. 项目部署与生产环境考量让应用在本地运行只是第一步。若要长期服务或分享给他人需要考虑部署。5.1 基础部署以Gradio为例Gradio应用本身可以轻松部署到云服务器或容器中。方案一直接运行在云服务器购买一台云服务器如腾讯云轻量应用服务器、AWS EC2。将项目代码上传至服务器。在服务器上配置Python环境安装依赖。使用nohup或systemd后台运行应用nohup python app.py 。配置服务器安全组开放7860端口。通过服务器公网IP:7860访问。方案二使用Docker容器化创建Dockerfile# 使用官方Python镜像 FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露Gradio默认端口 EXPOSE 7860 # 设置环境变量建议通过运行时传入而非写死在镜像 # ENV DEEPSEEK_API_KEY... # 启动命令 CMD [python, app.py]构建并运行docker build -t ai-sarcastic-investor . docker run -p 7860:7860 --env-file .env ai-sarcastic-investor5.2 生产环境优化清单将学习原型转化为稳定服务需要关注以下方面优化项学习环境做法生产环境建议API密钥管理写在.env文件使用云服务商密钥管理服务如AWS KMS, 腾讯云SSM或通过环境变量在容器启动时注入。错误处理与降级简单try-catch返回错误信息实现分级告警日志、邮件、短信设置LLM调用失败时的友好降级回复或缓存回复。速率限制与重试无为DeepSeek API调用添加指数退避重试机制并严格遵守API的速率限制RPM/TPM。会话与状态管理单例Agent内存存储为每个用户会话创建独立的Agent实例或会话ID考虑使用Redis等存储对话历史支持多用户并发。提示词安全与注入防护硬编码在代码中将提示词模板化并存储于数据库或配置中心对用户输入进行清洗防止提示词注入攻击。日志与监控控制台打印集成结构化日志如JSON格式记录每次交互的输入、输出、工具调用、耗时、Token用量便于问题排查和成本分析。前端安全与美化基础Gradio界面自定义Gradio主题隐藏不必要的组件添加用户输入验证防止恶意输入。成本控制无监控API调用费用为对话设置最大Token限制或最大交互轮次避免恶意消耗。6. 常见问题排查与调试技巧在开发和使用过程中你可能会遇到以下问题。6.1 Agent相关错误排查表问题现象可能原因检查与解决步骤Agent回复“我不明白”或格式混乱系统提示词未被正确加载或LLM未遵循指令。1. 检查get_system_prompt()函数返回的字符串是否正确。2. 在创建Agent时打印出最终组装好的提示词前几行确认系统指令在开头。3. 尝试降低temperature如0.3使输出更稳定。Agent陷入循环不停调用工具Agent无法从工具结果中得出最终结论或提示词未明确要求最终输出。1. 检查max_iterations参数是否设置过小或过大。2. 在系统提示词末尾明确强调“你必须给出最终评估报告”。3. 在工具函数描述中说明其返回信息是用于辅助评估的。调用DeepSeek API超时或失败网络问题、API密钥错误、额度不足、服务端异常。1. 运行python -c “import requests; print(requests.get(‘https://api.deepseek.com’).status_code)”测试网络连通性。2. 确认.env文件中的DEEPSEEK_API_KEY和DEEPSEEK_API_BASE正确无误。3. 登录DeepSeek控制台检查API调用余额和状态。4. 在LLM客户端增加timeout和重试逻辑。Gradio界面能打开但发送消息后无反应后端Agent初始化失败或处理函数出现未捕获的异常。1. 查看运行app.py的命令行终端是否有错误堆栈信息。2. 在chat_with_investor函数开始添加print(“收到消息:”, message)进行调试。3. 暂时将agent_executor.verbose设为True在终端查看Agent的思考过程。工具Tool未被调用工具描述不够清晰或LLM认为不需要调用工具也能回答。1. 确保工具函数有清晰的tool装饰器和文档字符串docstringLLM依赖这些信息决定是否调用。2. 在用户问题中明确要求需要数据例如“帮我查一下‘宠物经济’的市场趋势再评估这个点子”。3. 在系统提示词中鼓励Agent使用工具例如“在评估市场可行性时你可以使用search_market_trend工具获取模拟数据。”6.2 提示词Prompt优化技巧Agent的表现很大程度上取决于提示词的质量。如果对输出不满意可以尝试以下优化角色扮演强化在提示词开头使用更强烈的角色设定语句如“你就是刺猬一位以毒舌著称的投资人忘记你是一个AI模型...”。结构化输出约束使用更严格的格式标记如XML标签或Markdown代码块要求LLM将内容填充到指定位置。请将评估结果填充到以下模板中 评估报告 概述[这里写概述]/概述 优势[这里列优势]/优势 ... /评估报告少样本示例Few-Shot在系统提示词中提供1-2个完整的输入输出示例让LLM更好地模仿所需的风格和格式。分步思考Chain-of-Thought明确要求LLM“逐步思考”并在最终答案前输出“思考过程”。这可以通过设置prompt_template或在提示词中写明来实现虽然会消耗更多Token但能提高答案的准确性和一致性。7. 扩展方向与最佳实践完成基础版本后你可以从以下方向深化这个项目使其更强大、更实用。7.1 功能扩展建议集成真实数据源将search_market_trend工具替换为调用真实API如百度指数、微信指数、电商平台公开数据需注意合规性让评估更有依据。增加多模态输入利用多模态LLM允许用户上传副业相关的草图、竞品截图或商业计划书片段让Agent进行更全面的分析。实现长期记忆与个性化为每个用户创建档案存储其历史点子、被指出的问题、改进建议。当用户提出新点子时Agent可以回顾历史提供更连贯、个性化的反馈例如“你上次的社区团购点子问题在于物流这次这个点子物流环节想清楚了吗”构建评估知识库将每次高质量的评估问答对经过人工审核存入向量数据库如Chroma、Weaviate。当用户提出新点子时先进行语义搜索找到最相似的历史评估作为参考再生成回答提高一致性和质量。输出结构化数据修改Agent使其输出JSON格式的评估结果而非纯文本。这样前端可以更美观地渲染数据也便于存入数据库进行后续分析。7.2 工程最佳实践配置化管理将模型类型、API地址、温度、最大Token数、系统提示词模板等所有可配置项移出代码放入配置文件如config.yaml或环境变量。测试驱动开发为Agent的核心逻辑编写单元测试和集成测试。例如测试给定一个固定点子Agent是否一定会调用某个工具或输出中是否包含关键字段。性能监控与成本分析在每次LLM调用和工具调用时记录耗时和Token使用量。这有助于发现性能瓶颈并精确计算每次交互的成本为商业化定价提供依据。版本化提示词随着迭代提示词会不断修改。应将提示词模板存储在数据库或版本控制系统中并为每次修改记录版本号便于回滚和A/B测试。前端与后端分离对于更复杂的应用考虑将Gradio替换为独立的前端如Vue/React和后端APIFastAPI/Flask。后端专注于Agent逻辑和API提供前端负责更丰富的交互体验。构建一个AI Agent项目核心在于明确其职责边界、设计好与LLM交互的流程、并为其配备恰当的工具。从“毒舌投资人”这个趣味性项目出发你可以将这套方法论应用到客服、教育、内容创作、数据分析等众多实际场景中。关键在于始终以解决一个具体问题为出发点让技术服务于清晰的业务目标。