0.1.187
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
# replace with your username:
|
# replace with your username:
|
||||||
name = guan
|
name = guan
|
||||||
version = 0.1.186
|
version = 0.1.187
|
||||||
author = guanjihuan
|
author = guanjihuan
|
||||||
author_email = guanjihuan@163.com
|
author_email = guanjihuan@163.com
|
||||||
description = An open source python package
|
description = An open source python package
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Metadata-Version: 2.4
|
Metadata-Version: 2.4
|
||||||
Name: guan
|
Name: guan
|
||||||
Version: 0.1.186
|
Version: 0.1.187
|
||||||
Summary: An open source python package
|
Summary: An open source python package
|
||||||
Home-page: https://py.guanjihuan.com
|
Home-page: https://py.guanjihuan.com
|
||||||
Author: guanjihuan
|
Author: guanjihuan
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ LICENSE
|
|||||||
README.md
|
README.md
|
||||||
pyproject.toml
|
pyproject.toml
|
||||||
setup.cfg
|
setup.cfg
|
||||||
|
src/guan/AI_chat.py
|
||||||
src/guan/Fourier_transform.py
|
src/guan/Fourier_transform.py
|
||||||
src/guan/Green_functions.py
|
src/guan/Green_functions.py
|
||||||
src/guan/Hamiltonian_of_examples.py
|
src/guan/Hamiltonian_of_examples.py
|
||||||
|
|||||||
217
PyPI/src/guan/AI_chat.py
Normal file
217
PyPI/src/guan/AI_chat.py
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
# Module: AI_chat
|
||||||
|
|
||||||
|
# AI 对话
|
||||||
|
def chat(prompt='你好', model=1, stream=1, stream_label=0):
|
||||||
|
import requests
|
||||||
|
url = "http://api.guanjihuan.com/chat"
|
||||||
|
data = {
|
||||||
|
"prompt": prompt,
|
||||||
|
"model": model,
|
||||||
|
}
|
||||||
|
if stream == 1:
|
||||||
|
if stream_label == 1:
|
||||||
|
print('\n--- Start Chat Stream Message ---\n')
|
||||||
|
requests_response = requests.post(url, json=data, stream=True)
|
||||||
|
response = ''
|
||||||
|
if requests_response.status_code == 200:
|
||||||
|
for line in requests_response.iter_lines():
|
||||||
|
if line:
|
||||||
|
if stream == 1:
|
||||||
|
print(line.decode('utf-8'), end='', flush=True)
|
||||||
|
response += line.decode('utf-8')
|
||||||
|
print()
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
if stream == 1:
|
||||||
|
if stream_label == 1:
|
||||||
|
print('\n--- End Chat Stream Message ---\n')
|
||||||
|
return response
|
||||||
|
|
||||||
|
# 加上函数代码的 AI 对话
|
||||||
|
def chat_with_function_code(function_name, prompt='', model=1, stream=1):
|
||||||
|
import guan
|
||||||
|
function_source = guan.get_source(function_name)
|
||||||
|
if prompt == '':
|
||||||
|
response = guan.chat(prompt=function_source, model=model, stream=stream)
|
||||||
|
else:
|
||||||
|
response = guan.chat(prompt=function_source+'\n\n'+prompt, model=model, stream=stream)
|
||||||
|
return response
|
||||||
|
|
||||||
|
# 机器人自动对话
|
||||||
|
def auto_chat(prompt='你好', round=2, model=1, stream=1):
|
||||||
|
import guan
|
||||||
|
response0 = prompt
|
||||||
|
for i0 in range(round):
|
||||||
|
print(f'\n【对话第 {i0+1} 轮】\n')
|
||||||
|
print('机器人 1: ')
|
||||||
|
response1 = guan.chat(prompt=response0, model=model, stream=stream)
|
||||||
|
print('机器人 2: ')
|
||||||
|
response0 = guan.chat(prompt=response1, model=model, stream=stream)
|
||||||
|
|
||||||
|
# 机器人自动对话(引导对话)
|
||||||
|
def auto_chat_with_guide(prompt='你好', guide_message='(回答字数少于30个字,最后反问我一个问题)', round=5, model=1, stream=1):
|
||||||
|
import guan
|
||||||
|
response0 = prompt
|
||||||
|
for i0 in range(round):
|
||||||
|
print(f'\n【对话第 {i0+1} 轮】\n')
|
||||||
|
print('机器人 1: ')
|
||||||
|
response1 = guan.chat(prompt=response0+guide_message, model=model, stream=stream)
|
||||||
|
print('机器人 2: ')
|
||||||
|
response0 = guan.chat(prompt=response1+guide_message, model=model, stream=stream)
|
||||||
|
|
||||||
|
# 使用 LangChain 无记忆对话(需要 API Key)
|
||||||
|
def langchain_chat_without_memory(prompt="你好", temperature=0.7, system_message=None, print_show=1):
|
||||||
|
from langchain_openai import ChatOpenAI
|
||||||
|
from langchain_core.prompts import ChatPromptTemplate
|
||||||
|
import dotenv
|
||||||
|
import os
|
||||||
|
dotenv.load_dotenv()
|
||||||
|
llm = ChatOpenAI(
|
||||||
|
api_key=os.getenv("OPENAI_API_KEY"),
|
||||||
|
base_url=os.getenv("DASHSCOPE_BASE_URL"),
|
||||||
|
model="qwen-plus",
|
||||||
|
temperature=temperature,
|
||||||
|
streaming=True,
|
||||||
|
)
|
||||||
|
if system_message == None:
|
||||||
|
langchain_prompt = ChatPromptTemplate.from_messages([
|
||||||
|
("human", "{question}")
|
||||||
|
])
|
||||||
|
else:
|
||||||
|
langchain_prompt = ChatPromptTemplate.from_messages([
|
||||||
|
("system", system_message),
|
||||||
|
("human", "{question}")
|
||||||
|
])
|
||||||
|
chain = langchain_prompt | llm
|
||||||
|
response = ''
|
||||||
|
for chunk in chain.stream({"question": prompt}):
|
||||||
|
response += chunk.content
|
||||||
|
if print_show:
|
||||||
|
print(chunk.content, end="", flush=True)
|
||||||
|
if print_show:
|
||||||
|
print()
|
||||||
|
return response
|
||||||
|
|
||||||
|
# 使用 LangChain 有记忆对话(记忆临时保存在函数的属性上,需要 API Key)
|
||||||
|
def langchain_chat_with_memory(prompt="你好", temperature=0.7, system_message=None, session_id="default", print_show=1):
|
||||||
|
from langchain_openai import ChatOpenAI
|
||||||
|
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
||||||
|
from langchain_core.runnables.history import RunnableWithMessageHistory
|
||||||
|
from langchain_community.chat_message_histories import ChatMessageHistory
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
load_dotenv()
|
||||||
|
llm = ChatOpenAI(
|
||||||
|
api_key=os.getenv("OPENAI_API_KEY"),
|
||||||
|
base_url=os.getenv("DASHSCOPE_BASE_URL"),
|
||||||
|
model="qwen-plus",
|
||||||
|
temperature=temperature,
|
||||||
|
streaming=True,
|
||||||
|
)
|
||||||
|
if system_message == None:
|
||||||
|
langchain_prompt = ChatPromptTemplate.from_messages([
|
||||||
|
MessagesPlaceholder("history"),
|
||||||
|
("human", "{question}")
|
||||||
|
])
|
||||||
|
else:
|
||||||
|
langchain_prompt = ChatPromptTemplate.from_messages([
|
||||||
|
("system", system_message),
|
||||||
|
MessagesPlaceholder("history"),
|
||||||
|
("human", "{question}")
|
||||||
|
])
|
||||||
|
chain = langchain_prompt | llm
|
||||||
|
if not hasattr(langchain_chat_with_memory, "store"):
|
||||||
|
langchain_chat_with_memory.store = {}
|
||||||
|
|
||||||
|
def get_session_history(sid: str):
|
||||||
|
if sid not in langchain_chat_with_memory.store:
|
||||||
|
langchain_chat_with_memory.store[sid] = ChatMessageHistory()
|
||||||
|
return langchain_chat_with_memory.store[sid]
|
||||||
|
|
||||||
|
chatbot = RunnableWithMessageHistory(
|
||||||
|
chain,
|
||||||
|
lambda sid: get_session_history(sid),
|
||||||
|
input_messages_key="question",
|
||||||
|
history_messages_key="history",
|
||||||
|
)
|
||||||
|
response = ''
|
||||||
|
for chunk in chatbot.stream({"question": prompt}, config={"configurable": {"session_id": session_id}}):
|
||||||
|
response += chunk.content
|
||||||
|
if print_show:
|
||||||
|
print(chunk.content, end="", flush=True)
|
||||||
|
if print_show:
|
||||||
|
print()
|
||||||
|
return response
|
||||||
|
|
||||||
|
# 使用 Ollama 本地模型对话(需要运行 Ollama 和下载对应的模型)
|
||||||
|
def ollama_chat(prompt='你好/no_think', model="qwen3:0.6b", temperature=0.8, print_show=1):
|
||||||
|
import ollama
|
||||||
|
response_stream = ollama.chat(model=model, messages=[{"role": "user", "content": prompt}], stream=True, options={"temperature": temperature})
|
||||||
|
response = ''
|
||||||
|
start_thinking = 1
|
||||||
|
for part in response_stream:
|
||||||
|
response += part['message']['content']
|
||||||
|
if print_show == 1:
|
||||||
|
thinking = part['message'].get('thinking')
|
||||||
|
if thinking is not None:
|
||||||
|
if start_thinking == 1:
|
||||||
|
print('<think>')
|
||||||
|
start_thinking = 0
|
||||||
|
print(f"{thinking}", end='', flush=True)
|
||||||
|
else:
|
||||||
|
if start_thinking == 0:
|
||||||
|
print('</think>')
|
||||||
|
start_thinking = 1
|
||||||
|
print(part['message']['content'], end='', flush=True)
|
||||||
|
if print_show == 1:
|
||||||
|
print()
|
||||||
|
return response
|
||||||
|
|
||||||
|
# ModelScope 加载本地模型和分词器(只加载一次)
|
||||||
|
def load_modelscope_model(model_name="D:/models/Qwen/Qwen3-0.6B"):
|
||||||
|
from modelscope import AutoModelForCausalLM, AutoTokenizer
|
||||||
|
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||||||
|
model = AutoModelForCausalLM.from_pretrained(model_name)
|
||||||
|
return model, tokenizer
|
||||||
|
|
||||||
|
# 使用 ModelScope 本地模型聊天
|
||||||
|
def modelscope_chat(model, tokenizer, prompt='你好 /no_think', history=[], temperature=0.7, top_p=0.8):
|
||||||
|
messages = history + [{"role": "user", "content": prompt}]
|
||||||
|
text = tokenizer.apply_chat_template(
|
||||||
|
messages,
|
||||||
|
tokenize=False,
|
||||||
|
add_generation_prompt=True
|
||||||
|
)
|
||||||
|
inputs = tokenizer(text, return_tensors="pt")
|
||||||
|
response_ids = model.generate(**inputs, max_new_tokens=32768, temperature=temperature, top_p=top_p, do_sample=True)[0][len(inputs.input_ids[0]):].tolist()
|
||||||
|
response = tokenizer.decode(response_ids, skip_special_tokens=True)
|
||||||
|
new_history = history + [
|
||||||
|
{"role": "user", "content": prompt},
|
||||||
|
{"role": "assistant", "content": response}
|
||||||
|
]
|
||||||
|
return response, new_history
|
||||||
|
|
||||||
|
# LLaMA 加载本地模型(只加载一次)
|
||||||
|
def load_llama_model(model_path="D:/models/Qwen/Qwen3-0.6B-GGUF/Qwen3-0.6B-Q8_0.gguf"):
|
||||||
|
from llama_cpp import Llama
|
||||||
|
llm = Llama(
|
||||||
|
model_path=model_path,
|
||||||
|
n_ctx=32768,
|
||||||
|
verbose=False,
|
||||||
|
chat_format="chatml",
|
||||||
|
logits_all=False
|
||||||
|
)
|
||||||
|
return llm
|
||||||
|
|
||||||
|
# 使用 LLaMA 本地模型聊天
|
||||||
|
def llama_chat(llm, prompt, history=[], temperature=0.7, top_p=0.8):
|
||||||
|
new_history = history + [{"role": "user", "content": prompt}]
|
||||||
|
llm_response = llm.create_chat_completion(
|
||||||
|
messages=new_history,
|
||||||
|
temperature=temperature,
|
||||||
|
top_p=top_p,
|
||||||
|
repeat_penalty=1.5,
|
||||||
|
)
|
||||||
|
response = llm_response["choices"][0]["message"]["content"].strip()
|
||||||
|
new_history.append({"role": "assistant", "content": response})
|
||||||
|
return response, new_history
|
||||||
@@ -12,6 +12,7 @@ from .machine_learning import *
|
|||||||
from .file_reading_and_writing import *
|
from .file_reading_and_writing import *
|
||||||
from .figure_plotting import *
|
from .figure_plotting import *
|
||||||
from .data_processing import *
|
from .data_processing import *
|
||||||
|
from .AI_chat import *
|
||||||
from .decorators import *
|
from .decorators import *
|
||||||
from .others import *
|
from .others import *
|
||||||
statistics_of_guan_package()
|
statistics_of_guan_package()
|
||||||
@@ -1,64 +1,5 @@
|
|||||||
# Module: others
|
# Module: others
|
||||||
|
|
||||||
# AI 对话
|
|
||||||
def chat(prompt='你好', model=1, stream=1, stream_label=0):
|
|
||||||
import requests
|
|
||||||
url = "http://api.guanjihuan.com/chat"
|
|
||||||
data = {
|
|
||||||
"prompt": prompt,
|
|
||||||
"model": model,
|
|
||||||
}
|
|
||||||
if stream == 1:
|
|
||||||
if stream_label == 1:
|
|
||||||
print('\n--- Start Chat Stream Message ---\n')
|
|
||||||
requests_response = requests.post(url, json=data, stream=True)
|
|
||||||
response = ''
|
|
||||||
if requests_response.status_code == 200:
|
|
||||||
for line in requests_response.iter_lines():
|
|
||||||
if line:
|
|
||||||
if stream == 1:
|
|
||||||
print(line.decode('utf-8'), end='', flush=True)
|
|
||||||
response += line.decode('utf-8')
|
|
||||||
print()
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
if stream == 1:
|
|
||||||
if stream_label == 1:
|
|
||||||
print('\n--- End Chat Stream Message ---\n')
|
|
||||||
return response
|
|
||||||
|
|
||||||
# 加上函数代码的 AI 对话
|
|
||||||
def chat_with_function_code(function_name, prompt='', model=1, stream=1):
|
|
||||||
import guan
|
|
||||||
function_source = guan.get_source(function_name)
|
|
||||||
if prompt == '':
|
|
||||||
response = guan.chat(prompt=function_source, model=model, stream=stream)
|
|
||||||
else:
|
|
||||||
response = guan.chat(prompt=function_source+'\n\n'+prompt, model=model, stream=stream)
|
|
||||||
return response
|
|
||||||
|
|
||||||
# 机器人自动对话
|
|
||||||
def auto_chat(prompt='你好', round=2, model=1, stream=1):
|
|
||||||
import guan
|
|
||||||
response0 = prompt
|
|
||||||
for i0 in range(round):
|
|
||||||
print(f'\n【对话第 {i0+1} 轮】\n')
|
|
||||||
print('机器人 1: ')
|
|
||||||
response1 = guan.chat(prompt=response0, model=model, stream=stream)
|
|
||||||
print('机器人 2: ')
|
|
||||||
response0 = guan.chat(prompt=response1, model=model, stream=stream)
|
|
||||||
|
|
||||||
# 机器人自动对话(引导对话)
|
|
||||||
def auto_chat_with_guide(prompt='你好', guide_message='(回答字数少于30个字,最后反问我一个问题)', round=5, model=1, stream=1):
|
|
||||||
import guan
|
|
||||||
response0 = prompt
|
|
||||||
for i0 in range(round):
|
|
||||||
print(f'\n【对话第 {i0+1} 轮】\n')
|
|
||||||
print('机器人 1: ')
|
|
||||||
response1 = guan.chat(prompt=response0+guide_message, model=model, stream=stream)
|
|
||||||
print('机器人 2: ')
|
|
||||||
response0 = guan.chat(prompt=response1+guide_message, model=model, stream=stream)
|
|
||||||
|
|
||||||
# CPU性能测试(十亿次循环的浮点加法运算的时间,约30秒左右)
|
# CPU性能测试(十亿次循环的浮点加法运算的时间,约30秒左右)
|
||||||
def cpu_test_with_addition(print_show=1):
|
def cpu_test_with_addition(print_show=1):
|
||||||
import time
|
import time
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## Guan package
|
## Guan package
|
||||||
|
|
||||||
Guan is an open-source python package developed and maintained by https://www.guanjihuan.com/about (Ji-Huan Guan, 关济寰). With this package, you can calculate band structures, density of states, quantum transport and topological invariant of tight-binding models by invoking the functions you need. Other frequently used functions are also integrated, such as machine learning, file reading and writing, figure plotting, and data processing.
|
Guan is an open-source python package developed and maintained by https://www.guanjihuan.com/about (Ji-Huan Guan, 关济寰). With this package, you can calculate band structures, density of states, quantum transport and topological invariant of tight-binding models by invoking the functions you need. Other frequently used functions are also integrated, such as machine learning, file reading and writing, figure plotting, data processing and AI chat.
|
||||||
|
|
||||||
The primary location of this package is on https://py.guanjihuan.com.
|
The primary location of this package is on https://py.guanjihuan.com.
|
||||||
|
|
||||||
@@ -26,6 +26,7 @@ import guan
|
|||||||
+ file reading and writing
|
+ file reading and writing
|
||||||
+ figure plotting
|
+ figure plotting
|
||||||
+ data processing
|
+ data processing
|
||||||
|
+ AI chat
|
||||||
+ decorators
|
+ decorators
|
||||||
+ others
|
+ others
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user