python使用langchain整合通义千文
·
首先pip安装langchain和dashscope
pip install langchain
pip install langchain_community
pip install dashscope --upgrade
然后测试一下运行效果
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain.schema import HumanMessage
#api_key可以自己在阿里云申请
chatLLM = ChatTongyi(model="qwen-turbo", api_key="xxxxxxxxxxxxxxxxxx")
#流式输出
res = chatLLM.stream([HumanMessage(content="你好")], streaming=True)
for r in res:
print("chat resp:", r)
识别网络图片信息
from langchain_community.chat_models import ChatTongyi
from langchain_core.messages import HumanMessage
#api_key可以自己在阿里云申请
chatLLM = ChatTongyi(model="qwen-vl-max", api_key="xxxxxxxxxxxxxxxxxxx")
image_message = {
"image":
"https://lilianweng.github.io/posts/2023-06-23-agent/agent-overview.png",
}
text_message = {
"text": "总结这张图片的内容",
}
message = HumanMessage(content=[text_message, image_message])
res = chatLLM.invoke([message])
print(res)
角色扮演对话
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage
from langchain_core.messages import HumanMessage, SystemMessage
#api_key可以自己在阿里云申请
chatLLM = ChatTongyi(model="qwen-turbo", api_key="xxxxxxxxxxxxxxxxxxx")
messages = [
SystemMessage(
content=
"你是个乐于助人的助手,能把英语翻译成中文。"),
HumanMessage(
content=
"Translate this sentence from English to Chinese. I love programming."
),
]
res = chatLLM(messages)
print(res)
读取pdf,xlsx,docx文档并进行一个简单rag
首先pip安装组件
pip install docx2txt
pip install pypdf
pip install "unstructured[xlsx]"
pip install fsspec
读取文档的代码并根据文档内容进行回答
from langchain_community.chat_models import ChatTongyi
from langchain_community.document_loaders import Docx2txtLoader
from langchain_community.document_loaders import UnstructuredExcelLoader
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_text_splitters import CharacterTextSplitter
from langchain_chroma import Chroma
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_core.prompts import ChatPromptTemplate
import bs4
#创建通义千文的llm
chatLLM = ChatTongyi(model="qwen-turbo", api_key="xxxxxxxxxxxxxxxxxxx")
#加载各类文档文档,
class ChatDoc():
#加载word文档
def getfile():
loader=Docx2txtLoader("D://pro//example//test.docx")
text=loader.load()
return text
#加载xlsx文档
def getxlsx():
loader = UnstructuredExcelLoader("D://pro//example//test.xlsx", mode="elements")
text = loader.load()
return text
#加载pdf文档
def getpdf():
loader = PyPDFLoader("D://pro//example//test.pdf")
pages=loader.load_and_split()
print(pages)# pages[0],表示文档的第1页
return pages
#读取txt文档
def gettxt():
with open("test.txt") as f:
zzhx = f.read()
return zzhx
#加载网页
def getwebpage():
loader = WebBaseLoader(
web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
bs_kwargs=dict(
parse_only=bs4.SoupStrainer(
class_=("post-content", "post-title", "post-header")
)
),
)
docs = loader.load()
return docs
doc=ChatDoc.gettxt()
#print(doc)
#字符分割
lines = doc.splitlines()
# text_splitter = CharacterTextSplitter(chunk_size=150, chunk_overlap=10)
# docs = text_splitter.split_documents(doc)
#print(docs)
print('*************************************************************')
#使用自己申请的api_key调用阿里云的embedding
embeddings = DashScopeEmbeddings(model="text-embedding-v2", dashscope_api_key="xxxxxxxxxxxxxxxxxxx")
#创建了一个【文档向量存储】(vectorstore),使用 【DocArrayInMemorySearch】 类从提供的文本列表中创建,
# 【向量的嵌入】使用了 text-embedding-v1
vectorstore = DocArrayInMemorySearch.from_texts(
lines,
embedding=embeddings,
)
# 将文档向量存储为检索器retriever——>方便后续从检索器中提取上下文
retriever = vectorstore.as_retriever()
# 利用chatPromptTemplate创建回答问题的模板
template = """请根据以下上下文准确回答问题:
{context}
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
# StrOutputParser()创建一个字符串输出解析器
output_parser = StrOutputParser()
# 这行代码创建了一个【并行运行的任务链】,其中包括两个任务:1.一个是【从检索器】中获取【上下文】;2.另一个是将【问题】传递给【模型】
setup_and_retrieval = RunnableParallel(
{"context": retriever, "question": RunnablePassthrough()}
)
# 将retriever检索器中上下文和问题注入模板中——>调用llm。字符串输出
chain = setup_and_retrieval | prompt | chatLLM | output_parser
question = '文档中公司基本信息是什么?'
response = chain.invoke(question)
print("通义千文回答:" + response.__str__())
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)