返回文章列表

【ai】03LangChain基础使用与python基础


LangChain基础调用

LangChain目前支持三种类型模型

  1. llms(大语言模型):技术范畴统称,指大量参数,海量文本训练的Transformer架构模型。核心能力是理解和生成自然语言。

  2. 聊天模型:应用范畴的细分,专为对话场景优化的llms。核心能力是模拟人类对话的轮次交互,主要服务于聊天场景。

  3. 文本嵌入模型:文本嵌入模型接受文本作为输入,输出文本的向量。

from langchain_community.llms.tongyi import Tongyi

# 不用qwen3-max,因为qwen3-max是聊天模型,qwen-max是大语言模型
# 这里的内容可能过时了,先学着
model = Tongyi(model="qwen-max")

# 调用invoke方法向模型提问,这会一次性输出完整结果
res = model.invoke(input="你好")
print(res)

# 调用stream方法向模型提问,逐段返回结果,流失输出
res = model.stream(input="hi")
for chunk in res:
	# print 默认结尾加一个换行符 \n,为了改成字符串拼接所以end=""
	# print() 默认先把内容存缓冲区,等缓冲区满了再吐出来
	# flush=True 的意思是强制立即输出,不让它攒,来一个字就显示一个字。
	print(chunk, end="", flush=True)

基础使用

model = ChatTongyi(model="qwen3-max")
# 现在角色更推荐用 system user assistant
# 而非 system human ai
messages = [
	("system", "你是一个边塞诗人"),
	("human", "写一首唐诗"),
	("ai","锄禾日当午,汗滴禾下土"),
	("human","按照上一个回复的格式,再写一首唐诗")
]

for chunk in model.stream(input = message):
	print(chunk.content, end="", flush=True)

站在typeScript看python

Q:python调用异步函数不需要await吗?

A: model.invoke(...) 是同步调用,不需要 await,底层已经帮你处理了。但如果用的是异步接口 .ainvoke(),那就得 await。

Q:python传参要显式声明参数名吗?

A:不需要。Python 支持位置参数和关键字参数两种。同一个函数两种混着传也行。社区推荐的做法反而是越多用关键字参数越好,因为可读性好。

def greet(greeting, name):
    print(f"{greeting}, {name}")

# 位置传参
greet("你好", "丽")     # 你好, 丽

# 关键字传参
greet(name="丽", greeting="你好")

# 混着来(位置必须在关键字前面)
greet("你好", name="丽")

Q:python 的 from module import something 和 typeScript的 import something from module 正好相反。社区如何看待这件事?

A:有人调侃说"TypeScript 程序员第一周写 Python 时一定会写错方向",但认真说,Python 社区觉得 from module import something 的语序更符合自然语言——"从 module 拿 something"。两边的设计哲学不同,没有对错。

Q:py里注释要怎么写?我看到有的用#有的用""",有什么区别?循环里的注释也要前置空格吗?

A:# 是真正的注释。 解释器完全忽略它。""" 是字符串字面量,不是注释。它本质上是创建了一个没赋值给任何变量的字符串。只是因为它"写了但不影响执行",看起来像注释而已,通常用来写多行文档。""" 写的文档——可以用 .__doc__ 取出来。循环/函数内部的注释要前置空格,因为Python 用缩进确定代码块。注释跟着代码走,缩进要和所在代码块对齐。

def greet(name):
    """向某人打招呼"""
    return f"你好{name}"

print(greet.__doc__)  # 输出: 向某人打招呼

for i in range(5):
# 没有缩进 → 报错 IndentationError: unexpected indent
    print(i)

Q:python声明变量直接写变量名就行吗?不区分变量/常量吗?

A:不区分。 Python 没有真正的常量。社区用全大写命名表示常量,但只是约定。

Q:python的True要大写吗?

A:Python 把 True 和 False 当成了关键字(严格来说是内置常量),大小写敏感。这两个内置常量其实是 int 的子类,True == 1、False == 0,甚至可以当数字用。

print(True + True)   # 2

Q:中括号是数组吗?数组对类型敏感吗?里面的小括号是什么

A:是数组。Python 里叫列表(list)。列表对类型不敏感,可以随便放东西比如:

my_list = [42, "hello", True, 3.14, None, [1, 2, 3]]

A:小括号是元组,可以理解成是一旦创建就不能改的数组。messages里面用元组是因为想规定消息格式,语义上表示"这两个东西是绑定在一起的,不应该分开修改"。