LangChain 是什么

资料 第1章. AI通识与基础 - 飞书云文档

人工智能发展

神经网络

类的大脑是由很多神经元细胞 构成,AI神经网络的本质就是在模拟人类大脑神经元

大语言模型

2003年,图灵奖得主约书亚·本吉奥 (Yoshua Bengio )的一篇名为《A neural probabilistic language model》的论文开创了**神经网络语言模型(Neural Network Language Model,NNLM)**的先河

词向量 (Word Embedding)

  • 每个词语都可以经过模型运算转化为一个多维向量(也就是一个浮点数数组,GPT3采用12288维向量)

  • 通过训练使模型计算出的多维向量 与文字语义 产生关联,使多维空间中的不同方向表示不同语义

Lanchain

Lanchain : 用于快速构建智能体,可兼容任何模型提供商。

LangGraph: 从底层一步步控制智能题的构建,包括记忆(Memory),人机协调(HITL)等

Deep Agents :用于构建复杂的、处理多步骤任务的智能体。

LangSmith : 用于测试、观察、评估。部署智能体。

Agent: 一种使用大语言模型(LLM) 来决定应用程序控制的流的系统。

能够感知环境、进行推理、自主决策并采取行动以省市县特定的目标智能系统。

特性 传统聊天机器人/LLM AI Agent
交互模式 被动响应,问一句答一句 主动规划,以目标为导向
执行力 停留在文本生成层面 能操作软件、发送邮件、分析数据
自主性 需要人类给出详细步骤 只需给定最终目标,自主寻找路径

Agent的原理

  • Model:负责推理分析、思考,相当于Agent的大脑

  • Tools:负责执行任务,相当于Agent与外界交互的手脚

百炼平台

大模型服务平台百炼控制台

申请 apikey

python 访问本地 ollama 部署的 qwen3:8b

一、先确保 Ollama 已跑 qwen3:8b

ollama run qwen3:8b

看到聊天界面就说明本地模型正常运行。

二、Python 访问本地 Ollama qwen3:8b(完整版代码)

复制代码
import requests

# 本地 Ollama API 地址
OLLAMA_API_URL = "http://localhost:11434/api/chat"


def chat_qwen3(prompt):
    data = {
        "model": "qwen3:8b",
        "messages": [
            {"role": "user", "content": prompt}
        ],
        "stream": False  # 非流式,最简单
    }

    response = requests.post(OLLAMA_API_URL, json=data)
    result = response.json()

    # 输出回答
    print("AI:", result["message"]["content"])


# 测试
if __name__ == "__main__":
    user_input = input("你:")
    chat_qwen3(user_input)

用 openai 风格调用(兼容你之前的 qwen.py)

正确的 Ollama OpenAI 兼容地址 :base_url="http://localhost:11434/v1"

为什么带上v1?

  • 错误:http://localhost:11434 → 404
  • 正确:http://localhost:11434/v1 → 成功

Ollama 的 OpenAI 兼容接口必须加 /v1 后缀!

复制代码
from  openai import  OpenAI
# 连接本地Ollama
client=OpenAI(base_url="http://localhost:11434/v1",
              api_key="no-key") # 随便填一个
completion=client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role":"user","content":"你好,介绍一下自己吧!"}]
    )
print(completion.choices[0].message.content)

流式输出

复制代码
from  openai import  OpenAI
# 连接本地Ollama
client=OpenAI(base_url="http://localhost:11434/v1",
              api_key="no-key") # 随便填一个
completion=client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role":"user","content":"你好,介绍一下自己吧!"}],
    stream=True # 流式输出
    )
# 安全流式输出
for  chunk in completion:
    #print("chunk:",chunk)
    if chunk.choices:
        delta=chunk.choices[0].delta
        if delta.content:
            print(delta.content,end="",flush=True)

为什么流式输出(stream=True)时,AI 是一个字、一个词往外蹦,而不是一次性整段出来?

因为 大模型本来就是一个字一个字生成的 ,流式输出就是把生成过程实时传给你,所以你看到的就是一个个字 / 词

大模型接口规范

复制代码
curl -X POST https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -d '{
          "model": "deepseek-chat",
          "messages": [
              {
                  "role": "system",
                  "content": "You are a helpful assistant."
              },
              {
                  "role": "user",
                  "content": "Hello!"
              }
          ],
          "stream": false
      }'

- 请求方式:通常是POST,因为要传递JSON风格的参数
- 请求URL:与平台有关
  - DeepSeek官方平台:https://api.deepseek.com/chat/completions
  - 阿里云百炼平台:https://dashscope.aliyuncs.com/compatible-mode/v1
  - 本地ollama部署的模型:http://localhost:11434
- 请求头:开放平台都需要提供API_KEY来校验权限,本地ollama则不需要
  - Content-Type: application/json,请求参数的格式,必须是application/json,稍后解释
  - Authorization: Bearer <DeepSeek API Key>,上一节创建的API_KEY
- 请求参数:JSON格式:

提示词角色

角色 描述 示例
system 优先于user指令之前的指令,也就是给大模型设定角色和任务背景的系统指令 你是一个乐于助人的编程助手,你以小团团的风格来回答用户的问题。
user 终端用户输入的指令(类似于你在ChatGPT聊天框输入的内容) 写一首关于Java编程的诗
assistant 由大模型生成的消息,可能是上一轮对话生成的结果 注意,用户可能与模型产生多轮对话,每轮对话模型都会生成不同结果。

会话记忆问题

大模型的API接口是"无状态"的,服务端不会记录用户请求的上下文。因此我们调用API接口与大模型对话时,每一次对话信息都不会保留,多次对话之间都是独立的,没有关联的。

因此大模型并不知道之前的聊天历史,也就是说大模型是没有记忆的。

要想让大模型有记忆,必须在每次请求时,将之前所有对话的历史拼接好,传递给对话API接口。

复制代码
{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "12个苹果分给3个人,每人能分几个?直接告诉我答案"},
      {"role": "assistant", "content": "每人可以分到4个苹果。"},
      {"role": "user", "content": "如果是分给4个人呢?"}
    ],
    "stream": false
  }

环境变量读取

复制代码
from   openai import  OpenAI
from  dotenv import  load_dotenv
import  os

# 加载环境变量
load_dotenv()


client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"),base_url="http://localhost:11434/v1")
print("正在调用大模型")
response=client.chat.completions.create( model="qwen3:8b", messages=[
        {"role": "system", "content": "你是一名友好的AI助教。"},
        {"role": "user", "content": "你好,你是谁?"}
    ],
    stream=False)


print(response)
相关推荐
lee_curry2 小时前
第十周完整学习笔记:继续升级为“检索更准、权限安全、索引可维护、失败可恢复、长期可运行”的企业级 RAG 系统
python·ai·langchain·agent·langgraph
破烂三角裤16 小时前
AI 没有记忆?我给儿童故事 Agent 搭了一套“长期记忆”系统
langchain
云和数据.ChenGuang18 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain
Maiko Star1 天前
【HM-LC】LangChain RAG查询优化详解:查询重写、混合检索与重排序实战
langchain·rag
2501_913061341 天前
MCP核心能力
langchain
小林ixn1 天前
从线性 RAG 到 Agentic RAG:用 LangGraph 搭一个会判断、会纠错、会兜底的检索闭环
langchain·llm·agent
kyrie_sakura1 天前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus
承渊政道1 天前
【大模型应用开发:基于GPT-4和ChatGPT】(使用LangChain框架和插件增强LLM的功能)
chatgpt·langchain·llm·框架·大模型应用开发
日日大王学编程1 天前
LangGraph 基本用法详解:从入门到实战
python·语言模型·langchain
奔跑的熊猫1 天前
VSCode + FastAPI +AI Agent+langchain第一个程序
langchain·fastapi