首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >AI 应用开发实战:从 Prompt 调用到 RAG、Agent 与可观测工程

AI 应用开发实战:从 Prompt 调用到 RAG、Agent 与可观测工程

原创
作者头像
用户12339161
发布于 2026-10-16 16:38:23
发布于 2026-10-16 16:38:23
510
举报

AI 应用开发不是“调个 API 就完事”。真正上线的产品需要解决四个问题:模型能力边界、知识接入、流程编排、效果与成本控制。本文按工程链路,从最小调用讲到 RAG、Agent 和可观测落地。

一、最小调用:把 LLM 当作接口

所有 AI 应用的起点都是调用 LLM。以 OpenAI 兼容接口为例:

代码语言:javascript
复制
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["LLM_API_KEY"],
    base_url=os.environ.get("LLM_BASE_URL", "https://api.openai.com/v1"),
)

def chat(prompt: str, system: str = "你是一名严谨的助手。",
         model: str = "gpt-4o-mini", temperature: float = 0.3) -> str:
    resp = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": system},
            {"role": "user", "content": prompt},
        ],
        temperature=temperature,
        stream=False,
    )
    return resp.choices[0].message.content

要点:

  • 密钥放环境变量,不硬编码、不提交仓库;
  • temperature 低值适合事实任务,高值适合创意任务;
  • 保留 usage 字段,用于成本和配额统计。

二、提示词工程:稳定输出的第一道护栏

不要写“帮我总结一下”,而要明确角色、任务、上下文、输出格式:

代码语言:javascript
复制
SYSTEM = """你是资深技术编辑。
规则:
1. 只根据用户提供的材料回答;
2. 材料没有依据时回答“未找到相关依据”;
3. 输出 Markdown,包含结论、要点、风险三部分。"""

def summarize(text: str) -> str:
    return chat(f"材料如下:\n{text}", system=SYSTEM)

结构化输出更适合工程集成:

代码语言:javascript
复制
import json

SCHEMA = """只输出 JSON,格式:
{"title": "", "tags": [], "risk": "low|medium|high"}"""

def extract(text: str) -> dict:
    content = chat(text, system=SCHEMA)
    return json.loads(content)  # 生产环境务必用 Pydantic 校验

即使开启 JSON 模式,也要做 schema 校验,模型可能漏字段。

三、RAG:接入私有知识

LLM 有知识截止日期,也访问不到企业私有数据。RAG 的思路是:先检索,再生成。

代码语言:javascript
复制
def rag_answer(question: str, top_k: int = 4) -> str:
    docs = vector_search(question, top_k=top_k)
    context = "\n\n".join(d["content"] for d in docs)
    prompt = f"""只根据以下资料回答问题。
资料没有依据时回答“未找到相关依据”,不要猜测。
资料:
{context}
问题:{question}"""
    return chat(prompt)

RAG 工程要点:

  1. 分块:制度类 500—800 字,问答对 200—400 字;
  2. 元数据:部门、版本、生效日期、密级,用于权限过滤;
  3. 检索后过滤:按用户身份过滤,避免越权;
  4. 引用来源:返回文档标题和章节,便于核查;
  5. 测试集:准备 20—50 个真实问题,每周回归。

四、Agent:让模型能做事

当任务需要多步决策和工具调用时,就需要 Agent Loop:

代码语言:javascript
复制
def agent_loop(task: str, tools: dict, max_steps: int = 8) -> str:
    messages = [{"role": "user", "content": task}]
    seen = set()

    for _ in range(max_steps):
        resp = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=messages,
            tools=[t["schema"] for t in tools.values()],
        )
        msg = resp.choices[0].message

        if not msg.tool_calls:
            return msg.content

        for call in msg.tool_calls:
            name = call.function.name
            args = json.loads(call.function.arguments)

            sig = (name, json.dumps(args, sort_keys=True))
            if sig in seen:                 # 循环检测
                return "检测到重复调用,已中止。"
            seen.add(sig)

            result = tools[name]["fn"](**args)  # 执行工具
            messages.append(msg)
            messages.append({
                "role": "tool",
                "tool_call_id": call.id,
                "content": json.dumps(result, ensure_ascii=False),
            })

    return "达到最大步数,任务未完成。"

关键控制点:

  • max_steps 防止无限循环;
  • seen 检测重复工具调用(这是上线后最常见的故障);
  • 高风险操作(写库、发邮件、转账)必须人工确认。

五、可观测与成本控制

没有指标就无法迭代。每次调用记录:

代码语言:javascript
复制
import time
from dataclasses import dataclass

@dataclass
class Metric:
    model: str
    prompt_tokens: int
    completion_tokens: int
    latency_ms: float
    success: bool

def call_with_metric(prompt: str) -> tuple[str, Metric]:
    start = time.time()
    try:
        resp = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt}],
        )
        u = resp.usage
        m = Metric("gpt-4o-mini", u.prompt_tokens,
                   u.completion_tokens, (time.time()-start)*1000, True)
        return resp.choices[0].message.content, m
    except Exception:
        m = Metric("gpt-4o-mini", 0, 0, (time.time()-start)*1000, False)
        raise

核心指标:成功率、P99 延迟、Token 消耗、单次成本、缓存命中率。优化手段包括高频问题缓存、非实时任务批处理、简单任务用小模型、长上下文及时压缩。

六、安全与合规底线

  1. 密钥放环境变量或密钥管理服务;
  2. 敏感数据脱敏,必要时本地部署;
  3. 输入隔离,外部内容不直接当系统指令;
  4. 高风险输出(法律、医疗、财务)人工复核;
  5. 遵守模型许可证、平台规则和法律法规;
  6. 全链路审计日志,支持追溯。

七、总结

AI 应用开发的完整链路是:API 调用 → 提示词工程 → 结构化输出 → RAG → Agent → 可观测 → 安全合规。模型能力只是起点,真正决定产品成败的是工程化:稳定的输出格式、可靠的检索、可控的循环、清晰的指标和明确的合规边界。把这五件事做好,AI 应用才能从 Demo 走向生产。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、最小调用:把 LLM 当作接口
  • 二、提示词工程:稳定输出的第一道护栏
  • 三、RAG:接入私有知识
  • 四、Agent:让模型能做事
  • 五、可观测与成本控制
  • 六、安全与合规底线
  • 七、总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档