综合项目

  |   0 评论   |   0 浏览

目标: 不看答案,自己做一个能演示的助手。这是「精通」之前的收束作业,不是再讲新 API。

必须具备

  1. 至少一个真实工具(可以是天气桩、也可以是读本地文件)
  2. 多轮记忆(thread_id
  3. 一份你自己写的资料 + 检索后回答(RAG,假向量也行,但资料必须是你的)
  4. 一条不打 API 的测试(fake 模型或纯函数断言)

任选一个加分

  • 中间件限流或 HITL
  • Skills / 一个子代理
  • stream(version="v2") 打印进度
  • SqliteSaver 落盘

建议实现顺序(不要一上来画大图)

  1. L02 最小 agent + 你的工具
  2. 加上 L03 记忆
  3. 用 L05 第 3 段(检索挂成工具),资料换成你的 5~10 条笔记;问两个问题:一个资料里有、一个没有
  4. 把 L08 的测试改成断言「你的工具名」
  5. 需要分阶段再考虑 L09/L10/L11

骨架(可复制后改,不要原样交作业)

from dotenv import load_dotenv

load_dotenv()

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from langchain_core.documents import Document
from langchain_core.embeddings import FakeEmbeddings
from langchain_core.vectorstores import InMemoryVectorStore
from langgraph.checkpoint.memory import InMemorySaver

model = init_chat_model(
    "deepseek:deepseek-chat",
    temperature=0.5,
    max_tokens=2500,
    timeout=300,
    max_retries=6,
)

NOTES = [
    Document(page_content="在这里换成你自己的知识。"),
    Document(page_content="再写一条只有你知道的规定。"),
]
store = InMemoryVectorStore(embedding=FakeEmbeddings(size=64))
store.add_documents(NOTES)


@tool
def search_notes(query: str) -> str:
    """在私人笔记里检索。回答制度/流程/内部规定时必须调用。"""
    hits = store.similarity_search(query, k=3)
    return "\n".join(h.page_content for h in hits) or "没有检索到。"


agent = create_agent(
    model=model,
    tools=[search_notes],
    system_prompt="内部问题必须先 search_notes。资料没有就说不知道。",
    checkpointer=InMemorySaver(),
)
cfg = {"configurable": {"thread_id": "capstone"}}

print(agent.invoke(
    {"messages": [{"role": "user", "content": "先记住:我是新人小陈。"}]},
    config=cfg,
)["messages"][-1].content)

print(agent.invoke(
    {"messages": [{"role": "user", "content": "按笔记:新人要知道哪条规定?我是谁?"}]},
    config=cfg,
)["messages"][-1].content)

NOTES 和问题改成你的领域(请假、项目约定、学习笔记都可以)。

完成标准(自己打勾)

  •  换一个 thread_id 后,助手不再记得「小陈」(或你设的名字)
  •  问资料里没有的事,会承认不知道(或明确说检索为空)
  •  有一个 scratch_test.py 不需要 API key 就能 assert 通过
  •  能用 2 分钟向别人演示,并回答:为什么这里没用 Deep Agents / 没用多代理

之后怎么「精通」

精通不是再读一章。建议:

  1. 把 FakeEmbeddings 换成真 embedding,用你自己的 20 页材料。
  2. 给危险工具加 HITL。
  3. 每周用 L08 的方式加一条回归测试。
  4. 官方文档变了,以 docs.langchain.com 为准,本仓库脚本作对照。

回到路线图:教程首页


标题:综合项目
作者:llp
地址:https://llinp.cn/articles/2026/08/23/1787494024177.html