llm = OpenAI(model_name="text-ada-001", n=2, best_of=2)
# 生成文本:LLM 最基本的功能就是能够调用它,传入一个字符串并返回一个字符串。
result = llm("Tell me a joke")
print(result)
# 类似的还可以传入数组,得到 llm_result.generations[] 的各种信息
Chat 模型的调用示例
chat = ChatOpenAI(temperature=0)
messages = [HumanMessage(content="Translate this sentence from English to French. I love programming.")]
response = chat(messages)
# 响应将是一条消息。LangChain 目前支持的消息类型包括 AIMessage、HumanMessage、SystemMessage 和 ChatMessage。print(response.content)
文本嵌入模型 (Text Embedding Model) 调用示例
Embedding 类是一个用于与嵌入进行交互的类。有许多嵌入提供商(OpenAI、Cohere、Hugging Face 等)。这个类旨在为所有这些提供商提供一个标准接口。嵌入会创建文本的向量表示。这使我们可以在向量空间中执行诸如语义搜索之类的操作,寻找最相似的文本片段。
"You are a helpful assistant that translates {input_language} to {output_language}."
"input_language"
"output_language"
assert
# get a chat completion from the formatted messages
"English"
"French"
"I love programming."
Few Shot Examples 是一组示例,可用于帮助语言模型生成更好的响应。要使用 few shot examples 生成提示,可以使用 FewShotPromptTemplate。这个类接受一个 PromptTemplate 和一个 few shot examples 列表。然后,它将用 few shot examples 格式化提示模板。
如果在构建 prompt 过程中,如果有很多 example 示例,可以使用 ExampleSelector 类进行 select_examples,该方法接受输入变量,然后返回一个示例列表。该方法根据示例 example 与输入的相似度等选择示例。它通过查找嵌入与输入的余弦相似度最大的示例来实现此目的。使用方法示例如下:
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=1
)
similar_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="Give the antonym of every input",
suffix="Input: {adjective}\nOutput:",
input_variables=["adjective"],
)
response_schemas = [
ResponseSchema(name="answer", description="answer to the user's question"),
ResponseSchema(name="source", description="source used to answer the user's question, should be a website.")
]
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
# 进行调用后
parsed_output = output_parser.parse(output.content)
# 结果# {'answer': 'Paris', 'source': 'https://en.wikipedia.org/wiki/Paris'}
from langchain.indexes import VectorstoreIndexCreator
index = VectorstoreIndexCreator().from_loaders([loader])
query = "What did the president say about Ketanji Brown Jackson"
result = index.query(query)
# 下述方法可以返回查询的数据来源 sources 地址
sources = index.query_with_sources(query)
docsearch = Chroma.from_texts(texts, embeddings)
query = "What did the president say about Ketanji Brown Jackson"# 搜索
docs = docsearch.similarity_search(query)
# 添加文本
docsearch.add_texts(["Ankush went to Princeton"])
# 从文档初始化向量存储。使用文本拆分器方法直接获取文档
documents = text_splitter.create_documents([state_of_the_union], metadatas=[{"source": "State of the Union"}])
# 从向量数据库 db 中初始化一个检索器
retriever = db.as_retriever()
# 默认情况下,vectorstore 检索器使用相似性搜索。如果底层的 vectorstore 支持最大边际相关性搜索,则可以指定该搜索类型。
retriever = db.as_retriever(search_type="mmr")
docs = retriever.get_relevant_documents("what did he say about ketanji brown jackson")
from langchain.chains import SimpleSequentialChain
overall_chain = SimpleSequentialChain(chains=[chain, chain_two], verbose=True)
# Run the chain specifying only the input variable for the first chain.
catchphrase = overall_chain.run("colorful socks")
print(catchphrase)
docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": f"{i}-pl"} for i inrange(len(texts))])
from langchain import OpenAI
chain = RetrievalQAWithSourcesChain.from_chain_type(OpenAI(temperature=0), chain_type="stuff", retriever=docsearch.as_retriever())
chain({"question": "What did the president say about Justice Breyer"}, return_only_outputs=True)
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
tools = [
Tool(
name="Search",
func=search_tool.run,
description="Useful for when you need to answer questions about current events."
),
Tool(
name="Calculator",
func=calculator_tool.run,
description="Useful for when you need to answer questions about math."
)
]
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("Who is the CEO of Tesla? What is his net worth?")
在实际应用中,Agent 可以极大地扩展 LLM 的能力边界,使其不仅能回答问题,还能执行操作、访问外部 API 或处理复杂的工作流。
总结
LangChain 提供了一个完整的生态系统,使得开发基于大语言模型的应用变得更加模块化、可扩展和易于维护。通过理解模型、提示、内存、索引、链和代理这六大核心模块,开发者可以根据具体需求灵活组合,构建出功能强大的 AI 应用。随着生态系统的不断演进,LangChain 将继续降低 AI 开发的门槛,推动更多创新场景的实现。